angular.js - AngularJS 遮罩層顯示問題
我想大声告诉你
我想大声告诉你 2017-05-15 17:06:36
0
2
769

遇到一個問題,不知道怎麼解決,希望有知道的人能夠幫我看看哪邊出了問題。

我是想要在頁面上點選一個p,動態的顯示一個遮罩層。
我現在在控制顯示的這個p裡面添加了一個ng-click='showFav()', 在這個遮罩層最外面的一個p上面添加了一個ng-show='showMenu', 我是想通過$ scope.showMenu值來控制遮罩層的顯示的。

現在問題就是,我頁面上的這個$scope.showMenu值在showFav()裡面設定成true之後,並沒有讓遮罩層顯示出來。

調試的時候發現,運行完這個showFav之後,showMenu這個值就變成了false。這點不解啊。 。 。

是不是修改showMenu值之後要$scope.$apply()??? 但是會報錯:[$rootScope:inprog],我很方啊。 。 。

    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'
    };

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

全部回覆(2)
淡淡烟草味

1.基本型別的值,不要直接放在scope上,可以定義一個vm物件來存這些值,可以避免一些奇怪的問題,例如:

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

2.我不知道你頁面結構是什麼樣的,綁定點擊事件的p與遮罩層的關係,你最好把html也貼出來看下

大家讲道理

你如果指令沒有給指令定義scope,則表示和父公用同個scope作用域,那麼你在你的指令模板裡可以直接用

ng-show="showMenu"

來控制是不是顯示。

當然,你可以把遮罩層搞成一個全域的,任何地方都可以使用。
定義一個獨立作用域,例如:

scope:{
    show : '='
}

指令上寫為:

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

控制器裡再接著定義showMenu的值就行。

熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板