2014-10-29 86 views
0

我有一個user.list.ctrl和一個user.detail.cntr。所有的控制器都是作爲一個模塊構建的,並且注入到我在app.js中注入的「用戶模塊」中。 (見的完整代碼在下面的plunker)角度如何使用示波器從不同的控制器

我的控制器模塊

angular.module('user-module', ['user-module.controllers']); 

我的用戶模塊

angular.module('demo.app', ['user-module']); 

在兩個控制器我注入用戶FCTR與來自REST工廠數據。 (效果很好)

user.list.cntrl有$ scope.refresh() user.detail.cntrl有$ scope.update()

user.list.cntrl

    1. 當我輸入一條新記錄時,我調用$ scope.refresh(),以便刷新列表。 (這是工作的罰款)

user.detail.cntrl

    1. 當我從單擊列表中的用戶,在不同的視圖中用戶詳細信息負載(工作正常)
  • 當我更新user.detail,我想呼叫$ scope.refresh()來更新user.list,但它不工作。我不能叫$ scope.refresh()

我想,既然我注入相同的工廠到兩個控制器我可以使用對方的$範圍。

如何,我可以用$ scope.refresh()(或更新的列表,當我更新user.detail.js)

我做一個plunker所有的js文件的任何提案(plunker不功能,它只是表明我的代碼) http://plnkr.co/edit/HtnZiMag0VYCo27F5xqb?p=preview

感謝名單採取看看這個

回答

0

我落得這樣做的:

我在list.contrl添加了這個:

factoryId.listScope = $scope; 

,因爲我已經有factoryId在細節控制器注入(我的數據服務),我可以打電話這個:

factoryId.listScope.refresh(); 

它的工作原理,但我不知道這是否是最好的方法。任何意見?

1

這是一個非常概念性的問題。

您已經爲每個「視圖」創建了一個控制器,因爲它們適用於不同的活動。這是控制器的目的。這是對的。

但是,您正嘗試在另一個控制器中訪問用一個控制器寫入的刷新功能。從字面上看,這是錯誤的,從那時起,刷新不在用戶列表控制器或細節控制器內。

一個函數旨在控制(字面上)在特定視圖上發生的事情是一個控制器。 - 你有權利擁有一個控制器列表和一個細節。

要在控制器之間共享的函數必須是服務。這正是你想要的刷新功能。

無論何時將相同的工廠注入到n個控制器中,都無法使用每個控制器的範圍。這不是控制器的目的。

但是,無論何時將相同的工廠注入到n個控制器中,都可以使用其公開的方法。

你有問題,可以如下解決:

app.factory('sharedFunctions', [ 'factoryId', function sharedFunctions(factoryId) { 
    var refresh = function() { 
    factoryId.getAll(/*your params to query*/) 
    .success(function (response) { 
     //This will return the list of all your records 
     return response; 
    }); 
    }; 
    return sharedFunctions; 
}]); 

,註冊這家工廠服務,那麼你可以把它注入到你的控制器,每當你需要刷新,只需調用的暴露的方法服務並將新信息繪製到視圖中。

希望它適合你!

+0

我明白你的意思了。我很有道理。我會盡力回覆。謝謝 – user2062455 2014-10-29 21:33:31

+0

我試過了,我該如何調用服務的「暴露方法」?請你澄清一下。 thanx再次 – user2062455 2014-10-30 00:33:15