Angularjs 为什么工厂赢了';不行?(Angular.js)

Angularjs 为什么工厂赢了';不行?(Angular.js),angularjs,render,factory,Angularjs,Render,Factory,如果我在控制器参数中传递工厂名称,它里面的函数似乎不起作用,在视图中我也看到了括号的呈现。。。。 我做错了什么 我看到的是: 相反,如果我没有在控制器内部传递服务,它似乎可以工作 JS var LandingApp = angular.module('LandingApp',[]); LandingApp.factory('PreventivoTotaleFront',function(){ var voci = {}; voci.lista = []; AggiungiVoce.add

如果我在控制器参数中传递工厂名称,它里面的函数似乎不起作用,在视图中我也看到了括号的呈现。。。。 我做错了什么

我看到的是:

相反,如果我没有在控制器内部传递服务,它似乎可以工作 JS

var LandingApp = angular.module('LandingApp',[]);

LandingApp.factory('PreventivoTotaleFront',function(){

var voci = {};
voci.lista = [];

AggiungiVoce.add = function(voce){
    voci.lista.push({
        id: voci.lista.length,
        costo: voce
    })  
};

return voci; 
});

 //CONTROLLER 
LandingApp.controller('numberpages',function($scope,PreventivoTotaleFront){

$scope.primapagina = 150;
$scope.altrepagine = 90;
$scope.numeroaltrepagine = 0;

$scope.TotaleEuroPagine = 0;

$scope.CalcolaTotaleEuroPagine = function(){
    return $scope.TotaleEuroPagine = $scope.altrepagine * $scope.numeroaltrepagine + $scope.primapagina;
    AggiungiVoce.add(TotaleEuroPagine);
    alert(TotaleEuroPagine);
};

 }); 
HTML文件

    <body ng-app="LandingApp">
    <div class="container" ng-controller="numberpages">

        <form>

            <label>N° Pagine interne: </label><input type="number" min="0" ng-model="numeroaltrepagine" ng-change="CalcolaTotaleEuroPagine()"></input>
            <br/>{{TotaleEuroPagine | currency:""}}€<br/>

        </form>
        <br/><br/>
        <ul>
            <li ng-repeat="VociPreventivo in lista.voci">{{voci.id}} : {{voci.costo}}</li>
        </ul>

    </div>
</body>

N°Pagine interne:

{{TotaleEuroPagine}货币:'}}€


  • {{voci.id}:{{{voci.costo}

您没有正确使用factory。您需要返回一个包含方法的对象

var LandingApp = angular.module('LandingApp', []);
LandingApp.factory('PreventivoTotaleFront', function () {
    var voci = {};
    voci.lista = [];

    return {
        add: function (voce) {
            voci.lista.push({
                id: voci.lista.length,
                costo: voce
            })
        }
    };
});
在控制器中使用出厂设置,即
PreventivoTotaleFront.add()


您没有正确使用factory。您需要返回一个包含方法的对象

var LandingApp = angular.module('LandingApp', []);
LandingApp.factory('PreventivoTotaleFront', function () {
    var voci = {};
    voci.lista = [];

    return {
        add: function (voce) {
            voci.lista.push({
                id: voci.lista.length,
                costo: voce
            })
        }
    };
});
在控制器中使用出厂设置,即
PreventivoTotaleFront.add()


在factory PreventivoTotaleFront中,如果将函数add放入该返回对象中,则返回voci对象,如

voci: {
  add: function() {}
}
然后你可以从你的控制器调用它,就像

PreventivoTotaleFront.add()

在factory PreventivoTotaleFront中,如果将函数add放入该返回对象中,则返回voci对象,如

voci: {
  add: function() {}
}
然后你可以从你的控制器调用它,就像

PreventivoTotaleFront.add()

在使用AggiungiVoce变量(在
AggiungiVoce.add
中)之前,您没有创建AggiungiVoce变量(使用
var
)。在这种情况下,JavaScript会在父范围内查找变量AggiungiVoce是否存在,直到全局范围。分配好了。这就是为什么你可以在工厂没有注射的情况下使用它


在工厂中,您应该创建一个方法对象并返回该对象。由于工厂只创建一次,因此您可以在注入工厂的任何位置访问这些方法。

在使用AggiungiVoce变量之前(在
AggiungiVoce.add
中),您没有创建AggiungiVoce变量(使用
var
)。在这种情况下,JavaScript会在父范围内查找变量AggiungiVoce是否存在,直到全局范围。分配好了。这就是为什么你可以在工厂没有注射的情况下使用它


在工厂中,您应该创建一个方法对象并返回该对象。由于工厂只创建一次,因此您可以在注入工厂的任何位置访问这些方法。

您的变量AggiungiVoce不是预定义的。这将导致不良行为(即,它将被创建为全局行为)。如果我对它的翻译是正确的(添加项),那么它应该是一种方法。您应该将它和其他方法添加到对象中并返回该对象。这样,所有这些方法都可以在您注入工厂的任何地方使用。您的变量AggiungiVoce不是预定义的。这将导致不良行为(即,它将被创建为全局行为)。如果我对它的翻译是正确的(添加项),那么它应该是一种方法。您应该将它和其他方法添加到对象中并返回该对象。这样,所有这些方法都可以在您注入工厂的任何地方使用。