获取AngularJS指令进行更新

时间:2014-01-16 22:17:20

标签: angularjs

尝试将AngularJS中的理解指令提升到新的水平。我已经阅读了这本书并取得了很多进展,但这让我感到很难受。我认为我仍然缺少一些基本的理解基础。

让我们说一个视图我有两个指令。指令是并排的,而不是彼此嵌套。它们不以任何方式共享范围(我知道)。两个指令都注入相同的服务。单击指令#1中的项目后,单击处理程序会调用服务上的一个函数,该函数会更改指令#2应对其作出响应的服务。例如,假设我有一个“Logout”指令和一个“My Account”指令。单击“注销”后,我希望“我的帐户”指令变暗,或者可能将文本更改为“请登录”。 “Logout”指令调用myService.logout(),“My Account”指令范围可能绑定到myservice.someObj.isLoggedIn()。当点击发生时,isLoggedIn()函数开始返回false。

如何让第二条指令知道发生了什么?在发生重大变化时,我可以在指令内触发函数调用吗?如何设置指令的范围来执行此操作?

谢谢!

2 个答案:

答案 0 :(得分:2)

在您的指令中,您可以让“我的帐户”按钮观看服务以进行更改。你只需要做一个

$scope.$watch(mysevice.someObj.isLoggedIn, function() {

   //do something

})

或者,您可以在注销后使用第一个按钮$scope.$broadcast,并使用$scope.$on为该广播提供第二个服务监视。

<强>更新

 app.directive('directiveName', function () {
     restrict: 'AE',
     link: function ($scope, element, attrs){
         $scope.$watch(myservice.someObj.isLoggedIn, function () {
             // do stuff
         }
     }
 });

答案 1 :(得分:1)

Logout指令中,您可以使用$scope.$emit将消息LOGOUT_TRIGGERED传递给父作用域。

在父作用域中,使用$scope.$on收听该消息。收到该消息后,只需通过HANDLE_LOGOUT将消息Account发送到$scope.$broadcast指令。

Account指令中,再次使用$scope.$on收听HANDLE_LOGOUT条消息。

  • $scope.$emit向所有父作用域发送消息
  • $scope.$broadcast向所有子范围发送消息

或者您可以查看此EventDispatcher服务: https://github.com/trochette/Angular-Design-Patterns-Best-Practices/blob/master/js/base/EventDispatcher.js