加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > 安全 > 正文

angularjs指令不对属性变化做出反应

发布时间:2020-12-17 17:17:56 所属栏目:安全 来源:网络整理
导读:我有一个聊天指令,用于在页面上放置一个聊天室. mod.directive('chat',function () { return { templateUrl: '/chat',replace: true,scope: { chatID:'@chat',},controller: function ($scope,$element,$timeout) { var id = $scope.chatID ... },link: func
我有一个聊天指令,用于在页面上放置一个聊天室.

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>

这是一个名为“标准”的文件

mod.config(function($stateProvider) {
  $stateProvider.state('standard',{
    views: {
      'main': {
        templateUrl: '/tmpl/standard',controller: function($scope,$timeout) {
          $scope.currentChatID = ''
          $scope.setCurrentChatID = function(newID) {
            $scope.currentChatID = newID
          }
        }
      }
    }
  })
})

我正在使用angularjs-ui-router创建一个父视图,其中chat指令在该视图中提供聊天.这在第一页加载时工作正常,聊天加载.但是当我更改页面/聊天室时,我使用另一个控制器来运行setCurrentChatID().这会更改DOM中chat元素的currentChatID,我还看到chat元素的属性更改为angularjs-batarang中的新ID,但聊天指令的控制器不会运行.当chatID发生变化时,如何使其正常工作/激活聊天控制器.

谢谢.

解决方法

如果没有看到聊天控制器的其他代码,很难说,但您可能需要在聊天控制器中使用$watch,如:

$scope.$watch('chatID',function(newValue,oldValue) {
    // run some code here whenever chatID changes
});

编辑:有关$digest循环和Angular的运行时操作的更多信息,请参阅此AngularJS Guide.(检查运行时部分)

有关控制器的更多信息,请参阅此AngularJS: Understanding Controllers指南.以下是与您的问题相关的要点:

控制器应仅用于:

>设置范围对象的初始状态.
>向范围对象添加行为. (包括创建$watch等)

$digest循环仅处理:

> $evalAsync队列> $观察名单

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读