2013-06-08 5 views
1

categoryData $ resource 서비스가 주입 된 categoryListController에서 범주 목록을로드하는 사이드 바 (index.html)가있는 SPA에 각도 라우팅을 사용하고 있습니다. 카테고리 목록을 검색합니다.한 컨트롤러에서 다른 컨트롤러로 데이터 밀어 넣기

그런 다음 categoryCreateController를 사용하여 categoryData $ resource 서비스를 사용하는 범주를 추가하는 addCategory.html 템플릿이 있습니다.

문제는 전체 페이지를 새로 고치지 않으면 사이드 바가 업데이트되지 않는다는 것입니다. 나는 어떻게 든 새로 고치려면 categoryListController 말할 필요가 생각하고있어,하지만 그 방법을 모르겠습니다. categoryData.save (newCategory) 바로 뒤에 $ scope.categories.push (newCategory)를 수행하고 addCategory.html에 즉시 표시되는 새 카테고리를 가져올 수 있습니다. 그러나 이것이 사이드 바에 대한 대답이라고 생각하지 않습니다. 그걸 $ rootscope로 처리해야합니까? 나는 잘 모르겠다. 감사합니다

+0

[plunker] (http://plnkr.co/)를 만들거나 컨트롤러 코드를 더 제공 할 수 있습니까? – rtcherry

답변

1

여기에 categoryListController의 범주 목록을 업데이트하는 방법 중 하나는 $rootScope을 사용하여 추가 된 범주를 자세히 설명하는 메시지를 브로드 캐스팅하는 것입니다.

목록 컨트롤러에서이 메시지를 찾아서 서버에서 목록을 다시 가져 오거나 목록에 브로드 캐스트 메시지를 사용하여 새로 추가 된 항목을 사용하십시오. 목록 컨트롤러에서이 같은

$rootScope.$broadcast('categoryAdded', { 'category': newcategoryObject }); 

뭔가 추가 컨트롤러에서이 같은

뭔가

$scope.$on('categoryAdded', function (event, args) { 
    $scope.categories.push(args.category); 
}); 

당신은 컨트롤러에 종속성으로 $의 rootScope를 주입 할 수 있습니다.

CategoryList 서비스를 만들면 비슷한 결과를 얻을 수 있습니다. 서비스는 본질적으로 싱글 톤이며 컨트롤러를 통해 공유 될 수 있으므로 서비스 접근 방식을 사용하면 get에 대한 메소드와 CategoryList 서비스를 정의하고 카테고리를 '추가'하고이 서비스에서 반환하는 데이터에 바인딩합니다.

+0

나는 $ broadcast를 사용했고 목록을 다시 가져왔다. 그래서 나는 id를 가질 것이다. 감사! 나는 서비스가 훌륭한 접근이라고 확신하지만, 이것은 더 단순 해 보였다. – user2375056

0

데이터 구조를 공유하고 콘텐츠를 관리하는 데있어 service을 만들어야합니다. 이 같은

뭔가 :

angular.service('categoryService', function() { 
    var categories = [], initilized; 

    return { 
    this.getCategories = function() { 
     if (!initialized) { 
     // call resource to fulfill the categories array 
     initialized = true; 
     } 

     // you cold return a promise that would be resolved as soon 
     // as you get the first response from server 
     return categories; 
    }); 

    this.addCategory = function(category) { 
     // code to call $resource, add the category and update the 
     // categories array, shared between both controllers 
     // 
     // you could return the promise for adding the content 
    }); 

    this.removeCategory = ... 
    }; 
}); 

$resource를 호출 할 필요없는 것,이 서비스는 지속의 필요성을 걱정한다. 물론 약속을 드러내야 할 경우 더 많은 방법을 변경하고 추가 할 수 있습니다.

관련 문제