2017-01-20 13 views
0

내 컨트롤러 매개 변수 내에서 공장 이름을 전달하면 그 안에있는 함수가 작동하지 않는 것처럼 보입니다. 또한 괄호의 렌더링을 봅니다. 내가 뭘 잘못하고있는 걸까요? 여기공장이 작동하지 않는 이유는 무엇입니까? (Angular.js)

내가 무엇을보고 : enter image description here

을 대신 내가 컨트롤러 내부의 서비스를 통과하지 못한 경우, HTML

에게 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); 
}; 

}); 

을 작동하는 것 같다

<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> 
+0

변수 AggiungiVoce가 미리 정의되어 있지 않습니다. 이로 인해 바람직하지 않은 동작이 발생합니다 (예 : 글로벌로 생성됨). 내 번역이 정확하다면 (항목 추가), 어쨌든 방법이어야합니다. 개체와 다른 메서드를 개체에 추가하고 반환해야합니다. 그런 식으로 모든 방법을 공장에 주입 할 수 있습니다. – cst1992

답변

2

당신은 우리가 아닙니다. 공장에 적절하게 설치하십시오. 메서드가 포함 된 객체를 반환해야합니다. 당신이 당신의 기능을

voci: { 
    add: function() {} 
} 

와 같은이 반환 객체의 내부에 추가 넣어 경우 공장 PreventivoTotaleFront에서 PreventivoTotaleFront.add()

//CONTROLLER 
LandingApp.controller('numberpages', function ($scope, PreventivoTotaleFront) { 
    $scope.CalcolaTotaleEuroPagine = function() { 
     PreventivoTotaleFront.add(TotaleEuroPagine);   
    }; 
}); 
1

즉 컨트롤러에서 사용하는 공장으로

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 
      }) 
     } 
    }; 
}); 

, 당신은 voci 개체를 반환 다음과 같이 컨트롤러에서 호출 할 수 있습니다.

PreventivoTotaleFront.add() 
1

사용하기 전에 (var) AggiungiVoce 변수를 만들지 않습니다 (AggiungiVoce.add). 이 경우 자바 스크립트는 상위 범위에서 변수 AggiungiVoce가 전역 범위까지 존재하는지 확인합니다. 거기에 배정되었습니다. 그래서 공장을 투입하지 않을 때 사용할 수 있습니다.

공장에서는 메서드 개체를 만들어 반환해야합니다. 팩토리는 한 번만 생성되므로 팩토리를 삽입하는 모든 위치에서 해당 메서드에 액세스 할 수 있습니다.