我正在尝试在角度服务中创建一个构造函数,然后我可以在不同的角度控制器中使用它。问题是,我从构造函数生成的对象需要访问我的$ scope对象上的一个属性才能正常运行。
我的实现使用了我之前的功能,但它涉及将$ scope对象作为参数传递给构造函数。有没有更好的方法来实现这一目标?我目前实施的方式是否存在任何问题?
HTML:
<div ng-app="myApp">
<div ng-controller="myController">
<input type="text" ng-model="hello" />
<br/>{{hello}}
<br/>{{helloSayer.hello}}
<br/>{{helloSayer.helloLength()}}
</div>
</div>
JavaScript的:
var myApp = angular.module('myApp', []);
myApp.controller('myController', function myController($scope, myService) {
$scope.hello = 'Hello from controller';
$scope.helloSayer = new myService.HelloSayer($scope);
});
myApp.factory('myService', function () {
var HelloSayer = function (controllerScope) {
this.hello = 'Hello from service';
this.helloLength = function () {
return controllerScope.hello.length;
};
};
return {
HelloSayer: HelloSayer
};
});
以下是小提琴中的工作代码:http://jsfiddle.net/dBQz4/
答案 0 :(得分:1)
你真的不想通过范围,它们是复杂的野兽。更重要的是,作为一般规则,明确你传递的内容是个好主意。如果你只需要一杯牛奶,就不要送奶牛。
var myApp = angular.module('myApp', []);
myApp.controller('myController', function myController($scope, myService) {
$scope.hello = 'Hello from controller';
$scope.helloSayer = new myService.HelloSayer($scope.hello);
});
myApp.factory('myService', function () {
var HelloSayer = function (controller_hello) {
this.hello = 'Hello from service';
this.helloLength = function () {
return controller_hello.length;
};
};
return {
HelloSayer: HelloSayer
};
});
答案 1 :(得分:0)
传递您需要操作的范围是完全合理的。这也将简化单元测试服务。