2014-03-27 54 views
0

我有一個場景,其中有一個父控制器和多個子控制器,這些控制器可以基於某些業務邏輯存在於一個頁面上。AngularJS指定一個控制器的方式取決於另一個控制器

控制器在dom中的元素上指定,子控制器位於由ngSwitch控制的元素上。

例如這是我正在做的一個頗爲人爲的例子。

父控制器

app.controller('parentCntrl',function($scope){ 
     $scope.model = {}; 
     $scope.model.foo = 42; 
     //More stuff 
}); 

兒童控制器

app.controller('childCntrl',function($scope){ 
    $scope.model.bar = 24; 
    $scope.myFunction = function() { 
     return "The answer is: " + $scope.model.foo; 
    }; 
}); 

正如你所看到的,孩子控制器取決於$scope.model對象已經存在並依託向上遍歷原型鏈找到它。

有沒有一種方法可以在子控制器上指定它們需要特定的父控制器才能使它們工作?我的子控制器需要查看父範圍的屬性。或者我應該遵循某種其他最佳做法?

感謝

+0

如果我們在定義DOM級別的控制器(父級,子級)時正在討論模型,那很好。但是當關於代碼的時候,對於這樣的事情你必須使用'共享工廠或者服務'並且把它作爲依賴關係傳遞給兩個控制器。 「保留所有共享數據」。你會沒事的。 –

+0

我認爲有人已經回答..但服務是控制器之間共享數據的最佳做法。 – jOshT

回答

1

這樣做是中繼的外部兩個控制器的服務,它可以讓你的控制器之間有效溝通的最佳方式,並在您的$scope.model可以很好地和安全地保存。

例如:

yourapp.factory('myextprovider', function(){ 
    // Your code where to updare the $scope.model 
}) 

yourapp.controller('parentctrl', function(myextprovider, $scope){ 
    $scope.model = myextprovider.somemethods 
}) 
yourapp.controller('childctrl', function(myextprovider, $scope){ 
    $scope.model = myextprovider.othermethods 
}) 

另一種方式是,根據不同的情況下使用的指令,在那裏你可以有效地需要孩子一個外部父母的指令,並分享範圍。

我希望我給你一個關於如何在像他們這樣的情況下進行的想法。

相關問題