2014-09-21 4 views
0

레일스의 다른 뷰에서 두 컨트롤러를 연결하는 방법에 대한 팁이 필요합니다. 새 탭의 항목을 클릭하고 장바구니에 항목을 추가 할 때 색인에 장바구니와 장바구니가 있습니다.이 항목을 원하는 장바구니에 추가 할 수 있습니다.다른보기의 Angularjs 통신 컨트롤러 - 레일

app.controller('LineItemsController', ['$scope', '$rootScope', '$controller', 'LineItems', 
    function($scope, $rootScope, $controller, LineItems) { 
     $controller('CartsController', { 
      $scope: $scope 
     }); 

     $scope.fetchLineItems = function() { 
      LineItems.get({ 
       cartId: cartId 
      }).then(
       function(results) { 
        $scope.lineItems = results; 
       }, 
       function(error) {} 
      ) 
     }; 

     $scope.fetchLineItems(); 

     $scope.$on('scanner-started', function(event, args) { 
      console.log("alert"); 
      $scope.fetchLineItems(); 
     }); 
    } 
]); 

app.controller('LineItemController', ['$scope', '$rootScope', '$controller', 'LineItem', 
    function($scope, $rootScope, $controller, LineItem) { 
     $controller('LineItemsController', { 
      $scope: $scope 
     }); 

     $scope.addItem = function() { 
      new LineItem({ 
       itemId: window.Id 
      }).create().then(
       function(results) { 
        $scope.linkUpdated = true; 
        $rootScope.$broadcast('scanner-started'); 
       }, 
       function(error) { 
        $scope.errors = true; 
        $scope.linkUpdated = false; 
       } 
      ) 
     }; 
    } 
]); 

app.factory('LineItem', ['railsResourceFactory', 
    function(railsResourceFactory) { 
     return railsResourceFactory({ 
      url: '/items/{{itemId}}/line_items', 
      title: 'line_item' 
     }); 
    } 
]); 

app.factory('LineItems', ['railsResourceFactory', 
    function(railsResourceFactory) { 
     return railsResourceFactory({ 
      url: '/carts/{{cartId}}/line_items', 
      title: 'line_item' 
     }); 
    } 
]); 

내 코드는 $ broadcast와 $ on을 추가했으나 색인보기가 아닌 내 프로그램보기에서만 작동합니다.

$ scope refresh 같은 것이 있습니까, 아니면 내 색인에 줄 수있는 것이 있습니까?

답변

0

을 수행 할 수 있습니다 그리고 하나의 컨트롤러에 데이터를 설정

yourApp.factory('someService', function() { 
    var data = {}; 
    return { 
    getData: function() { 
     return data; 
    }, 
    setData: function(value) { 
     data = value; 
    } 
    }; 
}); 

상자 간단한 서비스 : 서비스에서이 값을 얻을 다음

someService.setData($scope.yourValue); 

과 :

someService.getData(); 

또는 함수 내에서 $wath를 구현 :

$scope.$watch(function() { 
    optimizerData.getData(); 
}, function(newValue) { 
    console.log(newValue); 
});