Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/angularjs/21.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript AngularJS指令不响应属性更改_Javascript_Angularjs_Angularjs Directive_Angularjs Scope_Angularjs Routing - Fatal编程技术网

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