【问题标题】:Get array updated from factory (Angular js)从工厂获取数组更新(Angularjs)
【发布时间】:2017-01-21 09:05:26
【问题描述】:

我在工厂中声明了一个名为 "voci" 的数组, 然后我有一个控制器,它使用函数 “CalcolaTotaleEuroPagine” 更新数组,我想要访问更新的数组 “voci” 并在视图中打印,但是它不起作用。 这是我所做的:

JS

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

//SERVICE THAT RETURN ARRAY
LandingApp.factory('PreventivoTotaleFront', function () {
   var voci = {};
   voci.lista = [];

   return {
      add: function (voce) {
         voci.lista.push({
            id: voci.lista.length,
            costo: voce
         });
        console.log(voci);
     }
   };
   return voci;
});


//CONTROLLER THAT UPDATE ARRAY
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;
       PreventivoTotaleFront.add(TotaleEuroPagine);
   };

}); 

HTML

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

        <form ng-controller="numberpages">

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

             <!--PRINT THE ARRAY VOCI-->
            <div>{{voci}}</div>
        </form>

    </div>
</body>

【问题讨论】:

    标签: angularjs arrays controller factory


    【解决方案1】:

    说法有误

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

    您在调用工厂之前从函数返回。因此工厂不会更新数组。 将PreventivoTotaleFront.add(TotaleEuroPagine);这一行放在return语句之前

    【讨论】:

    • 现在它返回 TypeError: dbg is undefined in console.log
    • $scope.TotaleEuroPagine = $scope.altrepagine * $scope.numeroaltrepagine + $scope.primapagina; PreventivoTotaleFront.add(TotaleEuroPagine);返回 $scope.TotaleEuroPagine;
    • 现在它可以工作了,但它不会在视图中打印出数组 {{voci}}
    • 我认为您正在直接尝试访问服务变量。通过控制器访问它。作为 $scope.vociArr = PreventivoTotaleFront();在您的控制器中添加此行。在视图中 {{vociArr}}
    • 嗯,谢谢,但我正在尝试一种更新工厂数据以在更多控制器之间共享的方法
    猜你喜欢
    • 1970-01-01
    • 2015-12-26
    • 1970-01-01
    • 2015-03-12
    • 1970-01-01
    • 2016-07-12
    • 2015-09-21
    • 2016-01-25
    • 1970-01-01
    相关资源
    最近更新 更多