저는 AngularJS에 대해 매우 익숙합니다. 그래서 저는 여전히 JQuery와 기본 자바 스크립트 방식으로 고심하고 있습니다.지시어와 컨트롤러간에 데이터를 공유하는 적절한 방법은 무엇입니까
나는 3 개의 컨트롤러와 사용자 지정 지시문이있는 응용 프로그램을 가지고 있으며 지시문이 자신의 부모가 아닌 다른 컨트롤러에 일부 데이터를 가져 오도록 알리고 싶습니다.
나는 데이터를 포함하는 변수, getter 및 setter 함수 및 업데이트 할시기에 대한 내 컨트롤러에서 토글 및 감시하는 변수가있는 솔루션을 생각해 냈습니다.
myApp.service('sharedService', function() {
this.update = false;
this.data = [];
this.toggleUpdate = function(){
if(this.update === false){
this.update = true;
}
else {
this.update = false;
}
};
this.getData = function() {
return this.data;
};
this.setData = function(value) {
this.data = value;
};
});
나는 단지 sharedService.toggleUpdate()를 호출합니다. 컨트롤러가 리소스에서 새 데이터를 가져 오길 원할 때. 내 컨트롤러는 $ scope. $ watch를 사용하여 내 서비스의 업데이트에 대한 변경 사항을 감시합니다.
myApp.controller('PlanController', ['$scope', 'sharedService', function($scope, sharedService){
$scope.init = function(){
//fetch data from API
}
//watch for toogling the new data
$scope.$watch(function() {
return sharedProps.update;
}, function(newVal, oldVal) {
$scope.init();
}, true);
});
나는 그림을 얻길 희망합니다.이 작업을 수행하는 적절한 방법입니까, 아니면 더 쉬운 방법이없는 것입니까?
myApp.service('sharedService', function ($rootScope) {
this.update = false;
this.data = [];
this.toggleUpdate = function() {
this.update = !this.update;
};
this.getData = function() {
return this.data;
};
this.setData = function(value) {
this.data = value;
// The data has been set so let's let everyone know
$rootScope.$broadcast('dataSet');
};
});
컨트롤러 :
나는 당신이 찾고있는 것이 stackoverflow (틀렸다면 올바른 부분)의 또 다른 절인 코드 리뷰라고 생각한다. 질문에 대답하기 위해 서비스는 앱에서 기능을 공유하는 좋은 방법입니다. 다른 방법은'$ emit/$ broadcast'를 사용하는 것인데, 여러 컨트롤러에서 서로 다른 작업을 동기화하려고 할 때 더 많이 사용합니다. '$ watch'는 값 비싼 방법이지만, 나는 그것을 할 다른 방법을 찾으려고 노력할 것입니다 ($ 브로드 캐스트가 할 것입니다). 내 2 센트 .. –
안녕하세요 알렉스 난 정확히 코드 검토를 찾고 아니에요. 나는 그 통보를 올바르게하는 법을 알고 싶다. 나는 너의 생각이 나를 위해 일한다고 생각해. 수락 할 수 있도록 답을 게시 해주세요. –