Javascript AngularJS指令不响应属性更改
我有一个聊天指令,用来在页面上放置聊天室Javascript AngularJS指令不响应属性更改,javascript,angularjs,angularjs-directive,angularjs-scope,angularjs-routing,Javascript,Angularjs,Angularjs Directive,Angularjs Scope,Angularjs Routing,我有一个聊天指令,用来在页面上放置聊天室 mod.directive('chat', function () { return { templateUrl: '/chat', replace: true, scope: { chatID:'@chat', }, controller: function ($scope, $element, $timeout) { var id = $scope.chatID ...
mod.directive('chat', function () {
return {
templateUrl: '/chat',
replace: true,
scope: {
chatID:'@chat',
},
controller: function ($scope, $element, $timeout) {
var id = $scope.chatID
...
},
link: function ...
}
})
HTML如下所示:
<div class="chat" chat="{{currentChatID}}" ui-view="currentChat"></div>
<div class="content" ui-view="mainContent"></div>
我正在使用angularjs ui路由器创建一个父视图,并使用chat指令在该视图中提供聊天。这在第一页加载时效果很好,聊天室加载完毕。但是当我更改页面/聊天室时,我使用另一个控制器运行setCurrentChatID()
。这将更改DOM中chat元素的currentChatID
,我还看到在angularjs batarang中chat元素的属性更改为新ID,但chat指令的控制器不运行。当聊天ID更改时,如何使其正常工作/激活聊天室的控制器
谢谢 很难说没有看到您的
聊天
控制器的其余代码,但您可能需要在聊天控制器中安装一个$watch
,如:
$scope.$watch('chatID', function(newValue, oldValue) {
// run some code here whenever chatID changes
});
编辑:有关$digest
循环和Angular的运行时操作的更多信息,请参见此。(检查运行时部分)
有关控制器的详细信息,请参阅本指南。以下是与您的问题相关的要点:
控制器应仅用于:
$watch
等)$digest
循环仅处理:
$evalAsync
队列$watch
列表我只是想知道控制器代码是否应该对摘要做出反应,或者是否需要手动设置一个手表。如果你需要一个手表,这是有意义的。通常,控制器本身应该在每条路线上只运行一次。要在摘要上运行的任何逻辑都应手动放置在
$watch
中。
$scope.$watch('chatID', function(newValue, oldValue) {
// run some code here whenever chatID changes
});