2016-06-14 93 views
1

因此,這裏是我的問題,我有一些函數/變量在父控制器編程方式創建一個控制器的新實例

function parentController($scope) { 

    $scope.numberOfChildren = $scope.numberOfChildren + 1 || 1; 
    console.log($scope.numberOfChildren); 

    $scope.someFunction = function(argument) { 
     // do stuff 
     $scope.someVariable = result of the function 
    } 
} 

我打電話這個控制器是指令控制器和其他兩個控制器被稱爲在同一視圖

function firstChildController ($scope, $controller) { 

    var aVariable = 1; 
    $scope.otherVariable = 10; 

    $controller('parentController', {$scope: $scope}); 

    $scope.someFunction(aVariable); 
} 

function secondChildController ($scope, $controller) { 

    var aVariable = 6; 
    $scope.otherVariable = 11; 

    $controller('parentController', {$scope: $scope}); 

    $scope.someFunction(aVariable); 
} 

我想要什麼,是不是可以共享父範圍的兩個孩子。 現在,只有一個父控制器的實例,所以當我根據它在同一個視圖上調用兩個指令時,我得到$ scope.numberOfChildren === 2. 我想要的是這個父控制器是加載兩次,但有分開的範圍($ scope.numberOfChildren === 1在每個子控制器)

我設法做到這一點在視圖模板中使用ng控制器和刪除$控制器調用,但我想以編程方式。 (我不想每次調用指令時都要寫相同的ng-controller代碼)。

<div ng-controller="parentController"> 
    <first-directive></first-directive> 
</div> 
<div ng-controller="parentController"> 
    <second-directive></second-directive> 
</div> 

最後,以保持同質化項目的代碼,我寧可不使用這個和VM的東西,如果有可能做的工作。

回答

1

parentController確實有它自己的範圍內,它的$scope你傳遞給它,當你實例化這種方式$controller('parentController', {$scope: $scope})工作。

結帳這個簡單的演示fiddle

您的情況中的問題可能是由共享相同範圍的指令引起的,因此將相同的作用域傳遞給父控制器。

+0

非常感謝你的回答亞歷克。事實上,指令分享範圍從他們被稱爲英寸 我只需要附加他們一個孤立的範圍(範圍:{}),問題解決了。 –

+0

@AloïsdeLaComble,我很高興它有幫助。 –

0

您期望的結果與系統運行方式完全相同:範圍不在兩個控制器之間共享。

當您在html中使用ng控制器時,將創建一個新的作用域(控制器實例)。從上面的代碼中,將創建兩個控制器實例。 您可以通過將{{$ id}}添加到html並查看範圍實例的ID來查看它。

<div ng-controller="parentController"> 
    {{$id}} 
    <first-directive></first-directive> 
</div> 
<div ng-controller="parentController"> 
    {{$id}} 
    <second-directive></second-directive> 
</div> 

如果你看到{{numberOfChildren == 2}}意味着你的代碼是錯誤的地方,而不是通過共享範圍的問題。

相關問題