我需要一个提示,如何在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刷新的东西或类似的东西我可以给我的索引?
答案 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);
});