2016-06-14 5 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의 ===를 얻을 수 각 자식 컨트롤러에서 $ scope.numberOfChildren === 1)

보기 템플릿에서 ng-controller를 사용하고 $ 컨트롤러 호출을 삭제하지만 프로그래밍 방식으로 수행하려고합니다. . (나는 지시어를 호출하고 같은 NG 컨트롤러 코드를 매번 작성해야하고 싶지 않아요).

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

마지막으로, 나는 오히려 가능하면 작업을 수행 할이와 VM 물건을 사용하지 않는 게 좋을 프로젝트의 코드에서 동질성을 유지합니다.

답변

1

parentController하지가 자신의 범위를 가지고 당신이 이런 식으로 $controller('parentController', {$scope: $scope}) 인스턴스화 할 때는 $scope 당신이 그것에 전달하는 작동합니다.

간단한 데모를 확인하십시오 fiddle.

귀하의 경우이 문제는 부모 컨트롤러에 동일한 범위를 전달함으로써, 같은 범위를 공유 지시에 의해 발생 될 수 있습니다.

+0

당신의 대답 알렉 주셔서 대단히 감사합니다. 사실, 지침은 호출 된 뷰에서 범위를 공유했다 난 그냥 그들에게 격리 된 범위 (범위 : {})를 첨부했다. 그리고 문제가 해결되었다. –

+0

@ AloïsdeLaComble, 도움이 된 것을 기쁘게 생각합니다. –

0

예상대로 시스템이 실행되는 방식과 동일합니다. 두 컨트롤러간에 범위가 공유되지 않습니다.

ng 컨트롤러를 html로 사용하면 새로운 범위 (컨트롤러 인스턴스)가으로 생성됩니다. 위의 코드에서 두 개의 컨트롤러 인스턴스가 생성됩니다. 당신은 추가하여 볼 수 있습니다 {{$ 아이디}} HTML과 범위 인스턴스의 ID를 확인합니다.

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

당신이 볼 경우 {{numberOfChildren == 2}} 코드가없는 범위의 문제를 공유함으로써, 어딘가에서 잘못된 것을 의미한다.