0

我有一个指令,我只是渲染,如果我的身份验证服务这样告诉我:Angularjs指令条件呈现不NG-如果

<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相同?请问如何更改指令代码(在指令声明内的安全服务中注入测试)? :

  • 存在于DOM指令,只有当nfIf解析为true
  • 的$自动呼叫破坏时nfIf决心false)?

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

回答

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> 
+1

感谢它帮我;)我也注入服务作为一个依赖摆脱额外的属性。 –