这是我第一次使用javascript和angular。 所以我正在开发一个带有角度的网页,我写了一个像这样的控制器:
/*BrandController to manage the html content of a single brand */
.controller('BrandController', [function(){
this.brand = {};
this.isSet = function(checkBrand) {
return this.origin === checkBrand;
};
this.setBrand = function(activeBrand) {
this.brand = activeBrand;
};
}])
我有一些品牌标签,当我点击一个品牌时,该品牌会分配给控制器。
<a href ng-click="BrandController.setBrand(brand)">
<h4>{{brand.name}}</h4></a>
我展示了这样的内容:
<b>Nombre</b><br>
{{BrandController.brand.name}}<br><br>
<b>Marca</b><br>
{{BrandController.brand.brand}}<br><br>
所以,它按照我想要的方式工作,但是一位朋友告诉我这不是正确的方法。我必须创建一个服务,传递品牌的信息。我们这样得到了:
/* BrandController to manage the html content of a single brand */
.controller('BrandController', function(BrandService, $scope){
$scope.brand = {
};
$scope.setBrand = function(brand){
$scope.brand = brand;
};
$scope.isSet = function(brand){
return $scope.brand === brand;
};
})
.service('BrandService', function(){
var brand = {};
var isSet = function(checkBrand) {
return brand === checkBrand;
};
var setBrand = function(activeBrand) {
brand = activeBrand;
};
return{
isSet: isSet,
setBrand: setBrand
};
});
这也有效,因为你可以看到更多的代码,我无法理解为什么要创建一个服务。 所以,如果你能在我的例子中解释什么是最好的方法,为什么我会非常感激。
谢谢。
答案 0 :(得分:1)
在某些情况下服务非常有用。 通过服务,您可以抽象逻辑来读取数据,从而保持控制器的标准。如果您的数据结构发生变化,您可以更改服务中的逻辑,而无需触及控制器(可能还有视图)。
控制器负责将数据绑定到视图,而不应关心如何接收或构建数据。
服务也是单例,因此您可以存储跨控制器的数据或控制器和指令之间的数据。
这些概念最常用的应用是数据服务。 here您可以找到一份很好的文档来解释最佳实践和一些逻辑优势。
希望这会有所帮助