Angularjs通信控制器在不同的视图中 - Rails

时间:2014-09-21 17:34:15

标签: ruby-on-rails ruby angularjs controller

我需要一个提示,如何在Rails中的不同视图中连接两个控制器。 我的索引中有物品和购物车,当我点击新标签中的项目并将商品添加到购物车时,我想将此商品添加到购物车中,无需刷新。

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刷新的东西或类似的东西我可以给我的索引?

1 个答案:

答案 0 :(得分: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);  
});