没有ng-if的Angularjs指令条件渲染



我有一个指令,我只有当我的认证服务告诉我这样:

<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解析为true时出现在DOM中
  • nfIf解析为false时自动调用$destroy ?

我尝试使用compile函数和一个观察者来观看security.isAuthenticated(),但没有成功

声明额外的指令属性,将安全对象传递给你的指令:

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

]);

现在你可以访问$scope了。myLoggedinDirective.tpl.html

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

最新更新