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>
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 :
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.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 :
La commande se lit :
Définissez simplement la valeur de showMenu dans le contrôleur.