2015-02-10 268 views
0

Im AngularJs新手:)。 但我有3個組件:控制器C1(用於輸入搜索輸入並單擊提交按鈕),控制器C2(用於將接收來自SearchService的結果並顯示它的div)以及用於發送一些難編碼結果的服務searchService。AngularJS需要2次點擊才能執行搜索操作

想法是,提交搜索文本後,我必須提交兩次。只需點擊一次,ui-router的視圖就會更新爲部分頁面,而不會加載結果。第二次點擊後,結果顯示。

然後下一個搜索在搜索視圖頁上完成,一切正常,一鍵點擊需要的數據。

如何解決它:我想更改ui路由器視圖,並通過一次點擊從服務中獲得結果?

C1方法的代碼(submiting SEARCHTEXT之後開始)

$scope.searchText = function searchText(text) { 
    $log.log("Method searchText with text: " + text);   
    //var parametersObject = {searchText: text, results: assetResults} 

    $state.go('search');   
    $log.log("SearchInputBoxController: rootScope Broadcasting message: " + text);   

    $rootScope.$broadcast('DoSearch', text);      

    $log.log("SearchInputBoxController finished"); 
}; 

C2方法:對事件 'DoSearch'

$scope.$on('DoSearch', function (event, data) {   
    $scope.asset = searchService.search(data); 
    $scope.searchText = data;    
}); 

searchService代碼事件處理程序:

Application.Services.factory('SearchService', ['SearchServiceResource', '$q', 
    function (SearchServiceResource, $q) { 
     return { 
      search : function (searchText) 
      {    
       var result = [ 
        {id: 'aaaaa', sn:"1234-1234-1234-1235", name:"DCU_name1", type: "DCU", tags: ["tag1", "tag2"]}, 
        {id: 'aaaaa', sn:"1234-1234-1234-1235", name:"DCU_name2", type: "DCU", tags: ["tag1", "tag2"]}, 
        {id: 'aaaaa', sn:"1234-1234-1234-1235", name:"NODE_name1", type: "DCU_Node", tags: ["tag1", "tag2"]}       
       ]; 
       return result; 
      } 
     }; 
}]); 

回答

0

相信點擊兩次是因爲第一次點擊觸發了狀態改變,然後是t他發生廣播,然後狀態發生變化。第二次點擊,狀態不需要改變,並且當前未改變的控制器獲得廣播。還有我能想到的一對夫婦不同的方法(和我將DEF從rootscope廣播迴避):

  1. 在共享服務

    ,保持搜索字符串變量,而 控制器上,把觀看該服務的變量。

  2. 更改您的路線/狀態設置,使其包含像/ search /:searchTerm之類的參數,並在控制器中查找已建立的狀態searchTerm變量並在控制器負載上查看是否提供searchTerm並激發搜索。 Some more info here

讓我現在,如果您需要任何幫助或更多的細節列出的想法。

+0

是的。你是對的。我無法將廣播發送到不活動的控制器。我通過設置和獲取方法將此更改爲服務。 – 2015-02-11 14:35:00

相關問題