2016-05-17 92 views
0

我有一個關於角範圍的一個基本問題(這可能是之前回答,但我不能找到一個解決方案):更新控制器範圍NG-包括/ NG-重複

在我的應用程序的觀點是多NG-包括與其他形成子範圍的角元素(例如ng重複)一起使用。我想在一個控制器中管理它們,但在ng-include模板中,我必須使用$ parent.variable_name來訪問/更改控制器中的變量。在ng-include中的ng-repeat內部,我必須使用$ parent。$ parent.variable_name來訪問/更改它。這很容易讓人困惑,因爲很難說,子範圍有多深。

有沒有更好的方法來引用子視圖中的控制器變量和函數?

+0

在控制器之間共享數據的最佳方式是使用服務/工廠。 – DevTrong

+0

你可以使用指令! –

+0

當我只使用一個控制器時,我該如何做到這一點?我有一個主控制器 - 無ng-include,ng-repeat等子控制器。 對不起,我有點新的角 – jacksbox

回答

0

創建一個服務/工廠(服務/工廠是單身人士)。

angular.module('moduleName') 
    .factory('factoryName', function() { 
    return { 
     variableName: 1 
    }; 
    }); 

然後去在你的控制器(您可以在所有其他控制器使用它),並使用工廠。

angular.module('moduleName') 
    .controller('controllerName', function($scope, factoryName) { 
    $scope.data = factoryName; 
    }); 

然後在您的HTML中,您可以簡單地綁定它。

<div ng-controller="controllerName"> 
    {{ data.variableName }} 
</div> 

沒有測試過壽。但它應該工作:)

+0

所以用這種方法(和你的例子),我必須爲每個ng-include和ng-repeat設置ng-controller到「controllerName」? – jacksbox

+0

我想你有一個子控制器(或更多的子控制器)。只需在你的子控制器中使用工廠,你就可以訪問該變量。你有一個示例代碼? – DevTrong

+0

不需要知道,如果你喜歡我可以做一個jsfiddle,但那需要一段時間。想象一下,我有一個控制器「mainCtrl」,它處理視圖的一部分。在這個視圖中,有兩種形式,它們都通過ng-include包含在內。現在「mainCtrl」應該從表單中獲取ng-models,但是我必須用$ parent來引用它們。$ parent.modelname ... – jacksbox