0

지시문과 컨트롤러가있는 중첩 구조가 있고이 구조의 리프에서 루트 컨트롤러의 범위 속성에 액세스해야합니다. 나는 이렇게하고있다 :

$scope.$parent.$parent.$parent.property.value.push({ name: "Diego" }); 

그러나 그것은 추악하고 신뢰할 수 없다. 범위를 질의하는 더 좋은 방법이 있는지 궁금합니다. 모든 $ scope에는 ID가 있고, 전체 구조를 통과하지 않고 스코프를 검색하는 데 사용할 수 있습니까? 감사.

+0

논리하면 안됩니다. 당신은 당신에게 논리를 재고하고 여기서 언급 한 해결책을 시도해야합니다. – Chandermani

답변

0

AngularJS와 종속성의 아이디어를 중심으로 구축되어 당신이 뭔가를 할 것이다 지침에서 the Scope docs

를 참조하십시오 주입. 따라서 범위를 벗어난 데이터를 쿼리하는 것은 바람직하지 않습니다. 당신이 $rootScope에 액세스해야하는 경우, 당신은 단순히 그것을 주입 AngularJS와 요청할 수 있습니다

  • :

    당신은 몇 가지 옵션이 있습니다. 예를 들어

, 당신이 컨트롤러를 사용하는 경우 : 당신이 컨트롤러에 액세스해야하는 경우

myApp.controller('myCtrl', function ($rootScope) { 
    // AngularJS will recognize the parameter and populate it 
    $rootScope.property.value.push({name: 'Diego'}); 
}); 

예를 들어, 몸에 지시 컨트롤러를 연결할 수 있으며, 어린이의 모든 지침과 공유 :

myApp.directive('body', function() { 
    return { 
    restrict: 'E', 

    controller: function() { 
     this.hello = function() { … }; 
    } 
    }; 
}); 

myApp.directive('myDir', function() { 
    return { 
    require: '^body', 

    link: function (scope, element, attr, bodyCtrl) { 
     bodyCtrl.hello(); 
    } 
    }; 
}); 
마지막으로
  • , 당신은 또한 싱글 서비스를 만들 수 있으며 whevener 당신을 필요로 필요해.
0

저는 $ broadcast와 $ on을 사용하여이 작업을 수행합니다.

$rootScope.$broadcast('directiveName.message', {name: 'Diego'}); 

그리고 컨트롤러에이 같은 이벤트를 수신 할 것 :

$rootScope.$on('directiveName.message', function(message) { 
    console.log(message.name); 
}); 
+0

나는 이런 종류의 해결책에 대해 생각했지만, 내가 필요한 기능을 누가 가지고 있는지를 이미 알았을 때 메시지를 방송하는 것이 "아름답다"라고 확신하지는 않는다. –