我试图传达两个controllers
。
var main = angular.module('starter', ["ionic", "ngCordova", "starter.services"]);
cart-ctrl.js
main.controller('CartCtrl',
["$scope", "global",
function($scope, global) {
$scope.$on("globalvar", function() {
//alert("from service cart: " + global.cart.items);
console.log("from service cart: " + global.cart.items);
$scope.carts = global.cart.items;
});
}]);
menu-ctrl.js
main.controller('AppCtrl',
["$scope", "$state", "global",
function($scope, $state, global) {
$scope.cart_click = function() {
global.updateCart();
$state.go('app.cart');
}
}]);
services.js
var service = angular.module("starter.services", []);
service.factory("global", ["$rootScope", "database",
function($rootScope, database) {
var service = {
cart: {
items: [],
count: 0
},
broadcastItem: function() {
$rootScope.$broadcast("globalvar");
},
updateCart: function() {
database.select_cart(function(p_cart) {
this.cart.items = p_cart;
alert("service cart: " + JSON.stringify(this.cart.items));
});
this.broadcastItem();
}
};
return service;
}]);
我想要发生的是当我点击标签(触发cart_click()
)时,购物车列表将重新更新。但是没有值传递到CartCtrl
。我想知道这段代码中有什么问题。当我从service.cart.items
传递值时,database
有一个值。
答案 0 :(得分:1)
我认为我们有2个选择。
在https://toddmotto.com/all-about-angulars-emit-broadcast-on-publish-subscribing/
中查看更多内容答案 1 :(得分:0)
我认为你应该在数据库调用的回调中调用this.broadcastItem();
。此外,回调中this
的上下文实际上并不是同一服务。将代码更新为
updateCart: function() {
var self = this;
database.select_cart(function(p_cart) {
self.cart.items = p_cart;
self.broadcastItem();
alert("service cart: " + JSON.stringify(self.cart.items));
});
}