尝试将AngularJS中的理解指令提升到新的水平。我已经阅读了这本书并取得了很多进展,但这让我感到很难受。我认为我仍然缺少一些基本的理解基础。
让我们说一个视图我有两个指令。指令是并排的,而不是彼此嵌套。它们不以任何方式共享范围(我知道)。两个指令都注入相同的服务。单击指令#1中的项目后,单击处理程序会调用服务上的一个函数,该函数会更改指令#2应对其作出响应的服务。例如,假设我有一个“Logout”指令和一个“My Account”指令。单击“注销”后,我希望“我的帐户”指令变暗,或者可能将文本更改为“请登录”。 “Logout”指令调用myService.logout(),“My Account”指令范围可能绑定到myservice.someObj.isLoggedIn()。当点击发生时,isLoggedIn()函数开始返回false。
如何让第二条指令知道发生了什么?在发生重大变化时,我可以在指令内触发函数调用吗?如何设置指令的范围来执行此操作?
谢谢!
答案 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