0
以下代码,特别是planetFactory部件在页面初始加载时起作用。意思是,一个新的Planet对象用7个默认铃声创建。但是,如果调用一个函数将一个新的Planet对象分配给$scope.planet
,则不会发生任何情况。在示例代码中,如果添加名称或直径,然后单击“创建新行星”,则不会调用planetFactory。角度工厂在页面加载时工作,而不是在被函数调用时工作
我在这里错过了什么工厂?
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>
厂是函数类型,如果你得到第一个控制台,没有任何条件,这是正常的,但你的工厂内的所有功能,还公开,直到你从你的控制器调用它们。 – Maher