是否可以将整个服务绑定到控制器范围?

时间:2015-05-04 14:30:30

标签: angularjs

例如这项服务:

services.factory('ElementsService', function () {

var currentElement = 'default element';

var service = {
    getCurrentElement: function () {
        return currentElement;
    },
    setCurrentElement: function (elmnt) {
        currentElement = elmnt;
    }
}
return service;

我经常发现从控制器执行以下操作非常有用:

controllers.controller('ElementsCtrl', function($scope, ElementsService) {

    $scope.elementsService = ElementsService;

});

能够绑定html中的服务变量,并且如果某些其他控制器或服务更改了变量,则保持最新状态。像这样:

<p>The current element is : {{elementsService.getCurrentElement()}}</p>

我的问题是:这样可以,还是应该避免这样做?

1 个答案:

答案 0 :(得分:4)

当然这个概念没问题,省去了必须制作许多不同的范围变量

另一种方法是

angular.extend($scope, ElementsService );

然后在视图中,您可以立即访问从工厂返回的相同数据和方法

<button ng-click="setCurrentElement(someObj)">test</button>