我对AngularJS很新,所以我可能会问完全错误的问题。我想要完成的是在单个应用程序中创建一个可重用的数据绑定类。下面用一个非常简单的例子演示了我想要完成的任务。
假设我想创建一个带有值和增量方法的计数器。我可以创建一个服务并在控制器中使用它,如下所示:
angular.module("fiddle", ["counter"])
.controller("MainCtrl", function($scope, counter) {
$scope.counter = counter;
});
angular.module("counter", [])
.service("counter", function() {
this.count = 0;
this.increment = function(x) {
this.count += x;
};
});
然后我可以显示一个视图来添加一个计数器:
<h1>Count: {{counter.count}}</h1>
<button ng-click="counter.increment(1)">Add 1</button>
<button ng-click="counter.increment(5)">Add 5</button>
<button ng-click="counter.increment(10)">Add 10</button>
这适用于一个计数器,但如果我想在同一个控制器中有多个计数器怎么办?由于服务是单身,我不能这样做。使用Angular创建类似的东西的最佳方法是什么,因为其他服务会更复杂?谢谢!
答案 0 :(得分:9)
要使服务不像单身人士那样你可以这样做:
angular.module("counter", [])
.service("counter", function() {
var aCounter = function() {
this.count = 0;
this.increment = function(x) {
this.count += x;
};
}
return {
getInstance: function () {
return new aCounter();
}
};
});
然后从您的控制器管理您的计数器,例如:
function myCtrl($scope, counter) {
$scope.counter1 = counter.getInstance();
$scope.counter2 = counter.getInstance();
}
答案 1 :(得分:2)
让您的服务支持多个计数器:
angular.module("counter", [])
.service("counter", function() {
// Counters is our object which service encapsulates
this.counters = {};
this.increment = function(name, x) {
// If such counter is not set, set it.
if (!this.counters[name]) { this.counters[name] = 0; }
this.counters[name] += x;
};
});
然后:
<button ng-click="counter.increment('count1', 1)">Add 1</button>
<button ng-click="counter.increment('count2', 5)">Add 5</button>
<button ng-click="counter.increment('count3', 10)">Add 10</button>
将视图绑定到您想要的任何计数器......