0

我有一些导航栏项目,只有在用户通过身份验证时才会显示。下面的简化视图:

导航栏

<body ng-controller="mainController as main">...
    <li ng-show="main.isSecretAgent"><a href="#secret">THIS IS A SECRET</a></li>
</body>

工厂

tardis.factory('bgData', [function() {
    var persistentData = {
        isSecretAgent: false, 
    };
    return {
        checkIfSecretAgent: function(){
            return persistentData.isSecretAgent
        }
    }
}]);

主控制器

tardis.controller('mainController',["$scope","bgData", 
    function($scope,bgData) {
        $scope.isSecretAgent = bgData.checkIfSecretAgent()
    }
]);

假设工厂中isSecretAgent设置的值bgData可能会响应用户操作而改变,我该如何设置我ng-show的更新基于此?

4

2 回答 2

2

你可以通过这种方式拥有一个功能......

导航栏

<body ng-controller="mainController as main">...
    <li ng-show="main.isSecretAgent()"><a href="#secret">THIS IS A SECRET</a></li>
</body>

主控制器

tardis.controller('mainController',["$scope","bgData", 
    function($scope,bgData) {
        $scope.isSecretAgent = function { 
          return  bgData.checkIfSecretAgent()
        }
    }
]);

如果你使用它会更好,ng-if因为如果ng-show元素仍然存在于 DOM 中。

于 2015-04-05T03:46:52.193 回答
1

如果您使用函数调用编写 ng-show:

<span ng-show="isSecretAgent()">Show me when I'm a secret agent</span>

然后每次运行摘要时都会检查工厂内部的值。这就是你需要做的所有事情。

除了你应该改变你的 isSecretAgent 来调用函数如下:

tardis.controller('mainController',["$scope","bgData", 
    function($scope,bgData) {
        $scope.isSecretAgent = bgData.checkIfSecretAgent
    }
]);

而不是分配给函数调用,而是分配函数(删除最后的'()'。

于 2015-04-05T03:47:24.843 回答