2016-06-27 3 views
0

두 컨트롤러간에 $ scope 개체를 공유하는 동안 문제가 발생했습니다.

컨트롤러 'IssueBookCtrl'에서 책 개체 요소 값을 이와 같이 업데이트합니다.

$ scope.books [i] .issued = true;

그럼 $ scope 객체를 컨트롤러 'BookListCtrl_Librarian'과 공유하기 위해 $ emit 서비스를 사용하고 있습니다.

$ scope. $ emit ('update_parent_controller', $ scope.books);

하지만 컨트롤러 'BookListCtrl_Librarian'을 사용하는보기를 실행하면 업데이트 된 개체가 표시되지 않습니다.

Controllers.controller('BookListCtrl_Librarian', ['$scope','$http','$location','$rootScope','BookData', 
function ($scope, $http ,$location, $rootScope , BookData) { 
    $http.get('data/books.json').success(function(data) { 
    if($rootScope.books==='undefined'){ 
     $rootScope.books = BookData.getData(); 
    } 
     $scope.books = data; 
    }); 
    $scope.options = ['bookId', 'cost']; 

    $scope.$on("update_parent_controller", function(event, books){ 
     $scope.books = books; 
    }); 
    $scope.issue = function(bookId) { 
     for (var i = 0, len = $scope.books.length; i < len; i++) { 
      if ($scope.books[i].bookId == bookId) { 
       $rootScope.book = $scope.books[i]; 
       break; 
      } 
     } 
     $location.path('/issue/'+bookId); 
    } 
     $scope.return = function (bookId) { 
      for (var i = 0, len = $scope.books.length; i < len; i++) { 
       if ($scope.books[i].bookId == bookId) { 
        $rootScope.book = $scope.books[i]; 
        break; 
       } 
      } 
      $location.path('/return/'+bookId); 
     } 
    $scope.backToLogin = function() { 
     $location.path("/main"); 
    } 
    }]); 
Controllers.controller('IssueBookCtrl', ['$scope','$rootScope','$http','$routeParams','$location', 
function ($scope,$rootScope, $http, $routeParams, $location) { 
    var Id=$routeParams.bookId; 
    $http.get('data/books.json').success(function(data) { 
     $scope.books = data; 
    }); 
    $scope.issue = function(Id) { 
     alert("issued"); 
     for (var i = 0, len = $scope.books.length; i < len; i++) {    
      if ($scope.books[i].bookId === Id) { 
       $scope.books[i].issued = true;    
       $scope.$emit('update_parent_controller', $scope.books); 
       $location.path('/home/librarian'); 
       break; 
      } 
     } 
    } 
}]); 

이 나를 인도 해주십시오

controller.js는, 어떤 도움이 많이 감사합니다.

덕분에 당신은 모델을 변경 한 후 요약을 강제로 시도 할 수

답변

1

:

$scope.$apply(); 

하지만 당신이 그 공유 모델과 논리를 유지하기 위해 책 서비스를 구축하는 것이 좋습니다 것입니다. 나만의 맞춤 서비스를 만드는 방법을 배울 수 있습니다 here.

또는 내부 컨트롤러가 $parent 변수를 사용하여 외부 컨트롤러의 모델을 참조 할 수 있도록 컨트롤러를 중첩 할 수 있습니다.

범위 변수가 변경 될 때 AngularJs가 더티 검사를 실행하므로 개체를 업데이트 할 때 문제가 발생하지 않아야합니다.

1

하이 유 범위

$rootScope.$emit('update_parent_controller', $scope.books); 

발광 대신 rootscope를 사용해야하는 등의 CONTROLER

$rootScope.$on('update_parent_controller', function(event, books){ 
    $scope.books = books; 
}); 
관련 문제