angulaire.js - Problème d'affichage du calque de masque AngularJS
我想大声告诉你
我想大声告诉你 2017-05-15 17:06:36
0
2
784

J'ai rencontré un problème et je ne sais pas comment le résoudre. J'espère que quelqu'un qui sait pourra m'aider à comprendre où se situe le problème.

Je souhaite cliquer sur un p sur la page pour afficher dynamiquement un calque de masque.
J'ajoute maintenant ng-click='showFav()' au p qui contrôle l'affichage, et j'ajoute ng-show='showMenu' au p le plus à l'extérieur du calque de masque que je souhaite afficher. est contrôlé via la valeur $scope.showMenu.

Le problème maintenant est qu'une fois que la valeur $scope.showMenu sur ma page est définie sur true dans showFav(), le calque de masque n'est pas affiché.

Pendant le débogage, j'ai constaté qu'après avoir exécuté showFav, la valeur de showMenu devenait fausse. Je ne comprends pas cela. . .

Avez-vous besoin de $scope.$apply() après avoir modifié la valeur showMenu ??? Mais une erreur sera signalée : [$rootScope:inprog], je suis très pratique. . .

    storeApp.controller('productCtrl', ['$scope', '$http', 'Cart', function($scope, $http, Cart){
        $scope.showMenu = false;

        $scope.addItem1 = function(productSku, num, storeKey) {
            Cart.addtoCart(productSku, num, storeKey);
        };
        $scope.showFav = function(item) {
            $scope.chooseItem = item;
            $scope.showMenu = true;
        };
    }]);
    
    storeApp.directive('choosefav', [function() {
    return {
        restrict: 'AE',
        replace: true,
        templateUrl: 'template/mask.html'
    };

Page

    <p ng-controller="productCtrl" ng-show="showMenu">
        <choosefav></choosefav>
    </p>
我想大声告诉你
我想大声告诉你

répondre à tous(2)
淡淡烟草味

1. Ne mettez pas les valeurs de type de base directement sur la portée. Vous pouvez définir un objet vm pour stocker ces valeurs, ce qui peut éviter certains problèmes étranges, tels que :

storeApp.controller('ctrlName',function($scope){
    $scope.vm={
        showMenu:false
    };
    
    $scope.showFav = function(item) {
        $scope.chooseItem = item;
        $scope.vm.showMenu = true;
    };
});

2. Je ne sais pas à quoi ressemble la structure de votre page et la relation entre le p qui lie l'événement de clic et le calque de masque. Vous feriez mieux de publier le code HTML pour y jeter un œil

.
大家讲道理

Si votre directive ne définit pas de portée pour la directive, cela signifie qu'elle partage la même portée que le parent, vous pouvez donc utiliser directement

dans votre modèle de directive.
ng-show="showMenu"

pour contrôler l'affichage ou non.

Bien sûr, vous pouvez rendre le calque de masque global et l'utiliser n'importe où.
Définissez un périmètre indépendant, tel que :

scope:{
    show : '='
}

La commande se lit :

<choosefav  show="showMenu"></choosefav>

Définissez simplement la valeur de showMenu dans le contrôleur.

Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal