2014-09-22 2 views
1

각도가있는 컨트롤러간에 정보를 공유하려고합니다. 이 일을하기에는 너무 열심히하지 않는다는 것을 알고 있습니다. 그러나 여기에 몇 가지 훌륭한 예제가 있습니다.하지만 내가 공유하려고하는 데이터를 가져오고 변경하는 방법과는 조금 다른 시나리오가 있습니다. 이 작업을 수행하기 위해 찾은 몇 가지 다른 예를 적용하려고 시도했지만이 작업을 수행하지 못해서 가능한 한 명확하게 설명하려고합니다.각 컨트롤러 간 공유 (채워진 후?)

문제

는 내가 뭘하려고 꽤 정직이다. 컨트롤러간에 공유하려고하는 드롭 다운 값이 있습니다. 착륙시에 어떤 값이 있었는지에 따라 그 값이 바뀌면 다른 컨트롤러에 표시됩니다.

문제는 모든 컨트롤러가 자신의 입력을 채우기 위해 호출하는 큰 공장을 설정했고, 10 개의 컨트롤러가 있으며 각 공장에 착륙 할 때 채워야하는 많은 입력이 있습니다. vars에 저장된 각각의 $ http 호출에 대해 $ q.all 함수를 사용하여 다른 호출을 호출하여 데이터가 저장되었는지 확인하고 기본값이 저장된 값으로 변경되도록합니다. 가능한 한이 방법을 유지하는 것이 좋습니다. 나는 그것을 어디에서나 사용하고 있으며 그것을 변화시키는 것은 고통 일 수 있습니다. 나는 다음을 수행 컨트롤러에서

var criteria1 = $http({method: "GET", url: "/crit1"}); 
var criteria2 = $http({method: "GET", url: "/crit2"}); 
var criteria3 = $http({method: "GET", url: "/crit3"}); 

    return { 
critera: $q.all([criteria1 ,criteria2, criteria3]) 
} 

: 같은

그래서 공장 보인다

getDefaults.criteria.then(function(data){ 

//fill out defaults and values for selects with this data 

//then get saved data (if any) 
$http({ 
      method: "GET", 
      url: "/getsavedData/" + sectionID 
     }) 
     .success(function(data, status, headers, config){ 
     //if data !null then overrite scopes for defaults 
     }; 

를 그래서 나는 다음이 2 개 선택 목록의 값을 공유 할 일은 노력하고 있어요 다른 컨트롤러. 이 예가 제공되었습니다 - http://jsfiddle.net/HB7LU/6510/. 그러나 나는 이것을 내가 어떻게하고 있는지에 적용하는 방법을 알아낼 수 없다. 대부분 데이터가 공유되어야하는 컨트롤러 외부에서 결정되기 때문입니다. 나는 이것을 피하려고 노력하고 있지만, 그것이 최선의 방법이라면 아마 그것을 바꿔야 할 것이다.

입력이 채워지기를 원하고 기본값을 얻은 다음 정보를 컨트롤러와 공유합니다 (변경 사항도 공유 할 때). 내가 2 방향 데이터 바인딩이하는 것과 비슷한 것을 할 수 있다면 이상적이지만 컨트롤러 사이에서, 내가 먹고있는 컨트롤러는 항상 선택 목록 응답의 정보를 먹이로 먹는 것입니다. 나는 이것으로 조금 어려움을 겪어 왔지만 쉽지는 않을 것이다. 나는 잘못 생각하고 있다고 생각한다. 어떤 방향이라도 대단히 감사 할 것입니다. 읽을 시간을내어 주셔서 감사합니다!

+0

검색된 데이터를 서비스의 공개 속성으로 설정하고 각 관심있는 컨트롤러에서 해당 데이터를 보지 않는 이유는 무엇입니까? –

+0

[this] (http://stackoverflow.com/questions/21452040/angularjs-sharing-methods-between-controllers/21452417#21452417)과 같은 것이지만 결과에'var msg = ...'를 설정해야합니다 $ q.all() 중. –

+0

$ broadcast와 $ on을 사용 해본 적이 있습니까? [link] (https://docs.angularjs.org/api/ng/type/$rootScope.Scope) –

답변

1

당신이 찾고있는 것이지만 '서비스'를 만들고 다른 컨트롤러에서들을 수 있는지 확실하지 않을 수 있습니다. 여기에 언급 된 것과 같습니다. https://stackoverflow.com/a/19469131/2658127

<input>은 원하는대로 변경할 수 있습니다.

0

이벤트를 사용할 수 있습니다. 이에

Scope Documentation

$on, $broadcast$emit을 확인하십시오.

일반적인 사용 예에서는 angular.element(catapp).scope()의 용도가 jquery 이벤트와 같이 각도 컨트롤러 외부에서 사용하도록 설계되었습니다.

이상적으로 사용 당신이 같은 컨트롤러 1에서 이벤트 작성합니다

$scope.$on("myEvent", function (event, args) { 
    $scope.rest_id = args.username; 
    $scope.getMainCategories(); 
}); 

을 그리고 두 번째 컨트롤러에 그냥

$scope.initRestId = function(){ 
    $scope.$broadcast("myEvent", {username: $scope.user.username }); 
}; 

편집을 할 거라고 : 실현이 사이의 통신을했다 두 개의 모듈

firstApp 모듈을에 종속성으로 포함 할 수 있습니까?여기서 angular.module을 선언하십시오. 그렇게하면 다른 앱과 통신 할 수 있습니다.