Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/angularjs/24.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 指令更新,然后在单击时运行查询以更新Dom_Javascript_Angularjs_Http_Angularjs Directive_Watch - Fatal编程技术网

Javascript 指令更新,然后在单击时运行查询以更新Dom

Javascript 指令更新,然后在单击时运行查询以更新Dom,javascript,angularjs,http,angularjs-directive,watch,Javascript,Angularjs,Http,Angularjs Directive,Watch,我已经研究了10多个不同的指导性问题,到目前为止没有一个对我有效。我正在尝试让我的控制器识别站点。selectedUnit已更改,它将更新我的自定义指令中的selectedChannel。第一次效果很好,但在那之后,ng单击不会更改视图信息。selectedChannel已注册并存储在我的聊天列表控制器上,但不会再次调用http请求 如果我在site.html中单击一个单元,那么chatList视图中为单元号选择的频道会发生变化,因此我猜http请求不会再次被调用 如何将侦听器添加到指令或聊天列

我已经研究了10多个不同的指导性问题,到目前为止没有一个对我有效。我正在尝试让我的控制器识别
站点。selectedUnit
已更改,它将更新我的自定义指令中的selectedChannel。第一次效果很好,但在那之后,ng单击不会更改视图信息。
selectedChannel
已注册并存储在我的聊天列表控制器上,但不会再次调用http请求

如果我在site.html中单击一个单元,那么chatList视图中为单元号选择的频道会发生变化,因此我猜http请求不会再次被调用


如何将侦听器添加到指令或聊天列表控制器中,以便在selectedChannel更改时再次调用http请求?

从您提供的代码中我可以看出,您需要进行一些更改

站点控制器

添加$scope.site的定义,否则site.selectedUnit将仅在通过ng单击在HTML中定义的上下文中可用

$scope.site = {
  selectedUnit: null
};
chatList.directive

移除隔离作用域并通过bindToController注入selectedChannel属性,以便在控制器中可以访问该属性

.directive('chatList', function() {
  return {
    restrict: 'E',
    bindToController: {
      selectedChannel: '='
    },
    templateUrl: 'chatList.html',
    controller: 'ChatListController',
    controllerAs: 'chatList'
  };
})
chatList.controller

观察对selectedChannel.id的更改以进行$http.get()调用


您还有许多其他问题无法列出,因此这里有一个可行的解决方案

您给了我们太多的片段,并遗漏了一些关键代码,如site.html的控制器、指令的模板('views/chatList.html')。我认为这里有不止一个问题,比如在控制器中引用一个从未定义过的名为“vm”的变量,并在指令中使用这个赋值“controller:'ChatListController as chatList'”,它应该是“controller:'ChatListController',controllerAs:'chatList'”。这只是显而易见的东西,没有看到其他相关的代码。我建议您在代码中设置并共享一个plunker。除了填充units数组的http请求之外,我的site controller中没有任何与指令交互的相关内容。我将添加views/chatList.html,但关键问题在列出的三个文件中。设置指令时,“控制器:'ChatListController as ChatList'”和“控制器:'ChatListController',controllerAs:'ChatList'”都起作用。我两者都用过。你的站点控制器是相关的,因为如果在控制器中声明site.selectedUnit,你将得到不同于未声明的结果。此外,我继续添加了var vm=this;抱歉,无法获取完整的代码,否则这个问题将是巨大的,我错过了这篇文章。selectedUnit未在站点控制器中声明。它的第一个也是唯一一个实例在视图中,$scope.$watch是我所需要的。我不确定我是否需要在指令或控制器中使用它,但在实现了您的所有建议之后,这就成功了。谢谢你的帮助。这对我来说是一天半的工作来达到这一点。我知道我的帖子不是最容易处理的,但你真的帮了我。
vm.tenants = [];

$scope.$watch(angular.bind(vm.selectedChannel.id, function() {

   // make http.get call here
}))