我有一些导航栏项只有在用户通过身份验证时才会显示。以下简化视图:
导航条
<body ng-controller="mainController as main">...
<li ng-show="main.isSecretAgent"><a href="#secret">THIS IS A SECRET</a></li>
</body>
FACTORY
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
进行更新?
答案 0 :(得分:2)
你可以用这种方式......
NAVBAR
<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中。
答案 1 :(得分: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
}
]);
不是分配给函数调用,而是分配函数(最后删除&#39;()&#39;