2014-05-23 2 views
2

내 지시문 중 하나에 컨트롤러가 두 개 필요하고 내 주소가 ngModel이고 내 컨트롤러가 필요합니다.지시문에 상위 컨트롤러 사용

상위 컨트롤러는 하위 링크 기능에 삽입해야하지만 제대로 작동하지 않습니다. 내가 ... 내가 잘못 뭐하는 거지

app.directive('container', function() { 
    return { 
    transclude : true , 
    template : "<div ng-transclude></div>", 
    controller : function ($scope) { 
     console.log('container controller'); 
     $scope.v1 = '123'; 
     $scope.f1 = function() { 
     console.log('f1'); 
     }; 
    }, 
    link : function (scope, element) { 
     console.log('container link'); 
    } 
    }; 
}); 

app.directive('single', function() { 
    return { 
    require : ['^container','ngModel'], 
    scope : false , 
    link : function (scope, element, attrs , parentsCtrl) { 
     console.log('single link'); 
     console.log(parentsCtrl); 

     var containerParent = parentsCtrl[0]; 
     var ngModel = parentsCtrl[1]; 

     // FAIL // 
     console.log(containerParent.v1); 
     containerParent.f1(); 
    } 
    }; 
}); 

과 HTML

<div container> 
    <input single type="text" ng-model="my.value" /> 
</div> 

single 지시어는 모두 컨트롤러의 생성자로 주입을 궁금하지만 container 컨트롤러가 비어 있습니다. 나는 v1 재산과 f1 기능을 찾을 것으로 예상했다. 링크 기능은 제어기 오브젝트 액세스 require으로

Full jsbin example

답변

8

, NOT 컨트롤러의 범위. 그래서이 :

$scope.v1 = '123'; // WRONG 

정말해야합니다

this.v1 = '123'; // RIGHT 

containerParent.v1으로 액세스 할 수.

+0

와우, 감사합니다. 각도로 시작할 때 창 밖으로'this'를 던지면 ... – haki

관련 문제