好的继续我对Angular工厂的理解。我试图从我膨胀的控制器中删除功能并放入工厂。我有一个“OrderFormController”,它包含整个应用程序的所有功能。我要做的是创建一个包含所有这些函数的工厂,并通过其视图控制器在特定视图中调用所需的函数。这是我在这个过程中的地方,但我无法让它发挥作用..
这是OrderFormController,它现在拥有所有函数
app.controller('OrderFormController', function($scope) {
$scope.toggleActive = function(s){
s.active = !s.active;
s.qty = 1;
};
$scope.add = function(s){
if (s.active){
s.qty+= 1;
}
};
$scope.minus = function(s){
if (s.qty != 1){
s.qty-= 1;
}
};
$scope.clearCart = function(){
angular.forEach($scope.items.results, function(s){
if (s.active){
s.active = false;
s.qty = 1;
}
});
angular.forEach($scope.foods, function(s){
if (s.active){
s.active = false;
s.qty = 1;
}
});
};
$scope.total = function(){
var total = 0;
var dtotal = 0;
var ftotal = 0;
angular.forEach($scope.items.results, function(s){
if (s.active){
dtotal+= s.qty * s.price;
}
});
angular.forEach($scope.options.results, function(s){
if (s.active){
ftotal+= s.price;
}
});
total = dtotal + ftotal;
return total;
};
$scope.totalItems = function(){
var totalItems = "";
var dtotalItems = "";
var ftotalItems = "";
angular.forEach($scope.items.results, function(s){
if (s.active){
dtotalItems+= s.name+" $"+s.price+".00 Qty: "+s.qty+" , ";
}
});
angular.forEach($scope.foods, function(s){
if (s.active){
ftotalItems+= s.name+" $"+s.price+".00 Qty: "+s.qty+" , ";
}
});
totalItems = dtotalItems + ftotalItems;
return totalItems;
};
});
这是我的工厂或至少是第一个功能
app.factory('OrderData', function() {
var OrderFactory = {};
OrderFactory.toggleActive = function(item){
item.active = !item.active;
item.qty = 1;
};
return OrderFactory;
});
这里是我试图调用此函数的MenuController
app.controller('MenuController', function($scope, OrderData) {
$scope.toggle = OrderFactory.toggleActive(item);
});
这是由
调用的ng-click="toggle(item)"
任何帮助都会受到谴责......
答案 0 :(得分:2)
将其设置为:
app.controller('MenuController', function($scope, OrderData) {
$scope.toggle = OrderData.toggleActive;
这使得.toggle函数与toggleActive函数相同。在您的示例中,它立即运行toggleActive函数。
旁注:你有OrderData和OrderFactory,它是哪一个?
答案 1 :(得分:2)
您的服务名为OrderData
,但您使用的是未定义的OrderFactory
变量来调用它。
app.factory('OrderData', function() {
...
您正在定义名为OrderData的服务。工厂是创建并返回服务的匿名函数。 OrderData是服务。
另请参阅Mathew's answer,了解如何在范围中公开服务方法。