2016-07-13 68 views
-1

我已经看了10多个不同的指令问题,迄今为止还没有人为我工作。我试图让我的控制器识别site.selectedUnit已更改哪些更新我自定义指令中selectedChannel。第一次很好,但之后ng-click不会改变视图信息。 selectedChannel已注册并存储在我的chatList控制器上,但不会再次调用http请求。指令更新,然后运行查询更新Dom,点击

如果我点击site.html中的单元,单元号的selectedChannel在聊天列表视图中发生变化,所以我猜测http请求没有被再次调用。

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

+0

你已经给了我们太多的片段,并遗漏了一些代码,如site.htm的控制器l,该指令的模板('views/chatList.html')。我想你有多个问题,比如在你的控制器中引用一个名为'vm'的变量,这个变量从来没有被定义过,并且在你的指令中使用了'controller:'ChatListController as chatList'“,应该是”controller:'ChatListController' ,controllerAs:'chatList'“。这只是显而易见的东西,没有看到其他相关的代码。我会建议设置并与您的代码共享一个plunker。 – jbrown

+0

在我的站点控制器中没有任何与填充单位数组的http请求之外的指令相互作用。我将添加视图/ chatList.html,但关键问题在三个列出的文件中。 “控制器:”ChatListController作为ChatList'“和”控制器:'ChatListController',controllerAs:'chatList'“在设置指令时工作。我曾与两个人合作过。 –

+0

您的站点控制器是相关的,因为如果site.selectedUnit在控制器中声明,您将得到不同的结果,如果它不是。 – jbrown

回答

1

尽我所能从您所提供的代码告诉,你需要做一些修改

site.controller

添加定义scope.site $否则site.selectedUnit只会在通过ng-click在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()调用

vm.tenants = []; 

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

    // make http.get call here 
})) 

您还有其他问题,以及是太多列出所以这里是一个工作plunker

+0

$ scope。$ watch是我所需要的。我不确定在我的指令或控制器中是否需要这些信息,但是在实施所有建议之后,这样做的确有用。感谢所有的帮助。对于我来说,这是一天半的工作。我知道我的帖子不是最简单的工作,但你真的帮助我。 –

+0

不客气。 – jbrown