2014-02-19 4 views
3

저는 두 개의 컨트롤러를 가지고 있습니다 : 하나는 메뉴 (추가/제거 할 수있는 요소의 동적 목록)이고 다른 하나는 ng-view입니다.템플릿에서 Angular service 객체에 액세스하는 방법은 무엇입니까?

ng-view 컨트롤러에서 메뉴 요소에 액세스해야합니다. 그래서 제대로 이해 했으므로 모든 컨트롤러에서 메뉴 개체를 사용할 수 있도록 서비스를 만들어야합니다. 그냥 삽입해야합니다.

완료.

하지만!

렌더링 할 때 이러한 개체가 필요합니다. 그래서 두 컨트롤러의 범위에 메뉴 요소를 넣어야합니까? 추악합니다. 서비스중인 요소를 업데이트 할 때마다 값을 업데이트해야합니다. 조금도.

그래서 현재 rootscope 및 서비스와 함께 작동합니다.이 서비스는 요소 목록 update/add/remove AJAX를 처리하는 메소드를 가지고 있습니다. 하지만 여기서 뭔가 잘못되었다고 생각합니다.

조언이 있으십니까?

+0

각도 '값'을 사용하여 양쪽에 값을 주입 할 수 있습니다. 또한 범위 속성에 서비스를 할당하고 템플릿의 서비스 속성을 직접 참조했습니다. (예 : {{$ scope.myService.someProperty}}) –

+0

@CraigSquire, AngularJS $ digest 루프에서 서비스를 완전히 검사하기 때문에 서비스를 $ scope에 할당하는 것이 좋습니다. 나는 그것을 필요로하지 않는다. 하지만 가치는 ... 좋습니다, 근데 왜 ... 루트 스코프가 아니지? 따라서 각 서비스에 대해 app.value를 생성해야합니다 (예 : 비슷한 상황). – dt0xff

+0

물론, 객체를 참조하는 서비스의 속성을 볼 수도 있습니다. $ scope.myData = $ scope.myService.myData 및 템플릿의 $ scope.myData.someProperty를 참조하십시오. 각 서비스에 대해 app.value가 의미하는 바가 확실하지 않습니다. $ rootScope에 데이터를 저장할 수도 있습니다. 나는 당신이 뭔가를 넣을 곳이 어디인지 알지 못할 때 투기장이 될 수 있기 때문에 일반적으로 그렇게하지 않습니다. –

답변

3

데이터가 모두 데이터이면 값을 사용할 수 있습니다. 각 컨트롤러에 Value를 삽입하고 범위에 저장 한 다음 템플릿의 Value 속성을 참조하십시오. 서비스를 사용한다면 똑같은 일을 거의 할 수 있습니다. 내 예제는 각각을 사용하는 하나의 솔루션을 보여줍니다.

이 예제를 참조하십시오 : 새 개체에 MyService.myData를 재 할당 할 경우주의해야 할 http://plnkr.co/edit/qTbSjnf6Q2FVDurGZhKd

<div ng-controller="MainCtrl"> 
    <input ng-model="mainVal.value"></input> 
    <input ng-model="mainSvcVal.value"></input> 
</div> 
<div ng-controller="OtherCtrl"> 
    <input ng-model="otherVal.value"></input> 
    <input ng-model="otherSvcVal.value"></input> 
</div> 

var app = angular.module('plunker', []); 

app.value('MyValue', {value: "Hello There"}); 

app.service('MyService', function() { 
    this.myData = { 
    value: "Goodbye" 
    } 
}); 

app.controller('MainCtrl', function($scope, MyValue, MyService) { 
    $scope.mainVal = MyValue; 
    $scope.mainSvcVal = MyService.myData; 
}); 

app.controller('OtherCtrl', function($scope, MyValue, MyService) { 
    $scope.otherVal = MyValue; 
    $scope.otherSvcVal = MyService.myData; 
}); 

한 가지는 것, 그것은 관계를 깰 것이다.

+0

잘 생겼지 만 잘 모르겠습니다. 따라서 서비스를 만들려면 app.value를 만들어 데이터도 저장해야합니다. 왜 그냥 봉사하지 않았습니까? 그렇다면 봉사의 목적은 무엇입니까? – dt0xff

+0

'값'은 '서비스'를 만들 때와 마찬가지로 팩토리 또는 생성자 함수를 사용하는 대신 기본 객체, 기존 함수 또는 프리미티브에 지정할 수있는 서비스입니다. '서비스'는 데이터를 저장할 수도 있습니다. http://docs.angularjs.org/api/auto/object/$provide –

+0

다른 방법으로도 비슷한 질문을 발견했습니다. http://stackoverflow.com/questions/12576798/angularjs-how-to-watch-service-variables –

관련 문제