Der folgende Code, insbesondere der PlanetFactory-Teil, funktioniert, wenn die Seite zum ersten Mal geladen wird. Das bedeutet, dass ein neues Planet-Objekt mit 7 Standardringen erstellt wird. Wenn jedoch eine Funktion aufgerufen wird, um ein neues Planet-Objekt $scope.planet
zuzuordnen, passiert nichts. Wenn Sie im Beispielcode einen Namen oder Durchmesser hinzufügen und dann auf "Neuen Planeten erstellen" klicken, wird die planetFactory nicht aufgerufen.Angular factory funktioniert beim Laden der Seite, nicht beim Aufruf einer Funktion
Was vermisse ich hier an Fabriken?
var app = angular.module('app', ['appControllers', 'appServices']);
var appControllers = angular.module('appControllers', [])
.controller('main', ['$scope', 'planetFactory', function($scope, planetFactory) {
$scope.planet = planetFactory;
$scope.newPlanet = function() {
console.log('This part is actually executed but no factory call');
$scope.planet = planetFactory;
}
}]);
var appServices = angular.module('appServices', [])
.constant('defaultRings', 7)
.factory('planetFactory', ['defaultRings', function (defaultRings) {
console.log('Factory called, logging this message');
function Planet (rings) {
this.name;
this.diameter;
this.rings = rings;
}
return new Planet(defaultRings);
}]);
<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.2.23/angular.min.js"></script>
<h3>Change the name or diameter so to confirm creating a new planet doesnt work</h3>
<div ng-app="app" ng-controller="main">
Name <input type="text" ng-model="planet.name"> <br/>
Diameter <input type="text" ng-model="planet.diameter"> <br/>
<hr/>
Planet object: <br/>
Name: {{ planet.name }} <br/>
Diameter: {{ planet.diameter }} Km <br/>
Rings: {{ planet.rings }}<br/>
<input type="button" ng-click="newPlanet()" value="Create new planet">
<br/><br/><br/>
</div>
Factory ist Funktionstyp, und es ist normal, wenn Sie erste Konsole ohne jegliche Bedingungen, aber alle Funktionen nach wie vor in Ihrem Werk privat, bis Sie sie von Ihrem Controller aufrufen. – Maher