Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby/21.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails 不同视图中的Angularjs通信控制器-Rails_Ruby On Rails_Ruby_Angularjs_Controller - Fatal编程技术网

Ruby on rails 不同视图中的Angularjs通信控制器-Rails

Ruby on rails 不同视图中的Angularjs通信控制器-Rails,ruby-on-rails,ruby,angularjs,controller,Ruby On Rails,Ruby,Angularjs,Controller,我需要一个技巧如何在Rails的不同视图中连接两个控制器。 我的索引中有项目和购物车,当我单击“新建”选项卡中的项目并将项目添加到购物车时,我希望将此项目添加到购物车而不刷新它 app.controller('LineItemsController', ['$scope', '$rootScope', '$controller', 'LineItems', function($scope, $rootScope, $controller, LineItems) { $co

我需要一个技巧如何在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,但它只在我的show视图上工作,而不是索引


是否有类似$scope refresh或类似的东西可以提供给我的索引?

您可以包装简单的服务

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);  
});