2016-07-13 140 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