Angularjs의 컨트롤러간에 개체를 공유해야하지만 작동하는 무언가를 만들었지 만 나에게는 조금 어색한 느낌이 듭니다. 나는 내가 가지고있는 것이 받아 들일 수 있는지, 그렇게 할 때 선호되는 방법이 있는지 궁금합니다. componentA에서 Angularjs의 구성 요소/컨트롤러간에 개체 액세스
은 내가 componentB에서 액세스 할 객체를 가지고있다.app.component("componentA", {
controller: function ($scope, $rootScope, $compile) {
//the object whose contents I want
$scope.objectToAccess = {name: 'object', value: 3};
//receives broadcast from componentB, returns the object
$rootScope.$on("getObject", function() {
$rootScope.$broadcast('receiveObject', $scope.objectToAccess);
});
}
}
app.component("componentB", {
controller: function ($scope, $rootScope, $compile) {
$scope.object = {name : null, value: null};
//receives the broadcast of the object and sets the value
$rootScope.$on("receiveObject", function (event,object) {
console.log(object);
$scope.object = object;
});
//broadcast to get the object contents
$rootScope.$broadcast('getObject');
}
}
이 방법은 효과가 있지만 너무 많은 앞뒤 통신으로 인해 너무 복잡합니다. 이런 종류의 물건을 처리하도록 특별히 고안된 Angular에 내장 된 것이 있습니까? 아니면 내가 받아 들일 수 있다고 생각합니까?
나는 당신의 행함 (방송) 컨트롤러간에 통신 할 수있는 올바른 방법이 무엇인지 생각합니다. –
예제에서 보았을 때,'componentA'와'componentB'의 관계가 무엇인지 알기는 어렵습니다. 그들은 형제 구성 요소입니까? 그렇다면, 상위 컴포넌트를 생성하는 것을 고려해보십시오.이 두 컴포넌트는'$ onChange' 이벤트를 수신하여 그에 따라 반응 할 수 있습니다. 당신이 작성한 것은 작동하지만 가능하다면'$ broadcast '를 대체하는 것이 바람직합니다. – mcranston18
당신이 할 수있는 또 다른 일은 $ rootScope.objectToaccess = {name : 'object', value : 3} 과 같이 rootScope에 objectToaccess를 놓은 다음 모든 컨트롤러에서 $ rootScope.objectToaccess . 개체를 세계화하므로 권장하지 않습니다. 이렇게하는 가장 좋은 방법은이 objectToaccess 객체가있는 서비스를 만든 다음 objectToaccess에 액세스하려는 컨트롤러의 종속성으로 서비스를 전달하거나 삽입하는 것입니다. –