2014-01-29 29 views
0

場景: 我有兩個控制器,它們使用一個服務,第一個控制器可以調用搜索方法,並在服務加載數據時獲得結果,其次只能通知服務加載數據。當單個服務加載數據時通知多個控制器

這裏我的代碼:

app.factory "searchService", ($resource, $q, $log) -> 
    resource = $resource("//localhost:8001/data/search/1") 

    searchSuccessDef = $q.defer() 

    searchSuccess: searchSuccessDef.promise 

    search: (scope, term) -> 
    def = $q.defer() 

    resource.get(

    ((content) -> 
     $log.info content 
     searchSuccessDef.notify() 
     def.resolve(content) 
    ), 

    ((response) -> 
     $log.warn response 
     def.reject(response) 
    ) 
) 

    def.promise 

    /// 

app.controller "navpanelController", ($scope, searchService) -> 

    $scope.search = (term) -> 

    searchResult = searchService.search(term) 

    searchResult.then (res) -> 

    console.log "!!!" 

    $scope.result = res 

/// 

app.controller "contentController", ($scope, $q, searchService) -> 

searchService.searchSuccess.then (content) -> 
    console.log "---" 

但是,這並不工作,因爲searchSuccessDef.notify()不會援引notifyer searchService.searchSuccess.then (content) ->,但如果不是我用searchSuccessDef.resolve(),這起火災的承諾一次。

這就是問題所在。 謝謝!

回答

1

我不熟悉CoffeesSript,但我可以告訴你的是,通知方法回調是第三個參數爲then方法

.then(function(greeting) { //Success 
    alert('Success: ' + greeting); 
}, function(reason) {  //Failure 
    alert('Failed: ' + reason); 
}, function(update) {  //notification 
    alert('Got notification: ' + update); 
}); 
+0

謝謝,覺得自己arrgh,花了2個小時,這種咖啡的的方式:) – baio

+0

我的不好:(我修好了。 – Chandermani

相關問題