0

我有一个指令,只有当我的身份验证服务告诉我时我才会呈现:

<div my-loggedin-directive ng-if="security.isAuthenticated()"></div>

指令本身很空:

.directive('myLoggedinDirective', [
    function() {
        return {
            templateUrl: 'modules/myLoggedinDirective.tpl.html',
            restrict: 'A',
            replace: true,
            link: function($scope) {
                 $scope.$on('$destroy', function() {
                     console.log('$destroy');
                 });
            }
        };
    }
]);

因为我的指令应该总是在我登录时呈现,所以 ngIf 逻辑应该在指令声明中,而不是在 ng-if 中(没有 ngIf 的指令将完全被破坏)。

知道我想要与ngIf? :

  • nfIf仅当解析为时才会出现在 DOM 中的指令true
  • nfIf解析为)时自动调用 $destroy false

我尝试使用compile功能和观察者观看security.isAuthenticated()但没有成功

4

1 回答 1

0

声明额外的指令属性,将安全对象传递到您的指令中:

<div my-loggedin-directive my-security='security'></div>

并且指令应该包括范围,确保它使用双向绑定:

.directive('myLoggedinDirective', [
function() {
    return {
        scope: {
            security: "=mySecurity"
        }
        templateUrl: 'modules/myLoggedinDirective.tpl.html',
        restrict: 'A',
        replace: true,
        link: function($scope) {
             $scope.$on('$destroy', function() {
                 console.log('$destroy');
             });

             $scope.$watch('security', function(newVal, oldVal) {
                 if (newVal.isAuthenticated()) {
                 // do something
                 } else {
                 // do something
                 }
             });
        }
    };
}

]);

现在您可以访问您的寺庙 myLoggedinDirective.tpl.html 中的 $scope.security 变量

<div ng-if="security.isAuthenticated()">...</div>
于 2014-06-10T09:50:40.907 回答