在Angular中使用服务和控制器之间的区别

时间:2016-05-09 19:50:01

标签: angularjs service controller

这是我第一次使用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
    };

 });

这也有效,因为你可以看到更多的代码,我无法理解为什么要创建一个服务。 所以,如果你能在我的例子中解释什么是最好的方法,为什么我会非常感激。

谢谢。

1 个答案:

答案 0 :(得分:1)

在某些情况下服务非常有用。 通过服务,您可以抽象逻辑来读取数据,从而保持控制器的标准。如果您的数据结构发生变化,您可以更改服务中的逻辑,而无需触及控制器(可能还有视图)。

控制器负责将数据绑定到视图,而不应关心如何接收或构建数据。

服务也是单例,因此您可以存储跨控制器的数据或控制器和指令之间的数据。

这些概念最常用的应用是数据服务。 here您可以找到一份很好的文档来解释最佳实践和一些逻辑优势。

希望这会有所帮助