angularjs:使用服务在控制器之间进行通信

时间:2013-08-28 08:07:13

标签: angularjs angularjs-service

我有一个注入我的控制器的服务。该服务定义了许多功能。

现在我想向该服务添加一个变量,该变量将在应用程序中保存selectedItem。我这样做了:

angular.module('myservices', []).
factory('serviceA', function () {        

    var serviceA= {  
      selectedItem: selectedItem,      
      ... more functions here
    };
    return serviceA;

    var selectedItem;
    ... functions go here
});

在我的一个控制器中,我设置了所选项目:

 serviceA.selectedItem = someItem;

并在另一个控制器中,视图引用所选项目,如下所示:

<span>{{serviceA.selectedItem.value}}</span>

即使正确设置selectedItem,也不会更新范围。我究竟做错了什么 ?

3 个答案:

答案 0 :(得分:7)

要在视图中访问服务,您需要将其分配到范围:

$scope.serviceA = serviceA;

http://jsfiddle.net/MzJsZ/

答案 1 :(得分:1)

angular.module('myservices', []).factory('serviceA', function () {        
  return {

////工厂返回一个对象

     var serviceA= {  
      selectedItem: selectedItem,      
      ... more functions here
    };
    return serviceA;

    var selectedItem;
    ... functions go here

}

});

这有用吗?你错过了返回{}部分,一切都在那里。如果您要使用服务,您只需写一下.serviceA = {...}

并且您在控制器中的代码缺少$ scope!

$scope.someItem= serviceA.selectedItem; 

或(我真的不知道你想要什么)$scope.serviceA.selectedItem= someItem;

然后在你的范围内

<span>{{someItem.value}}</span>

或(我真的不知道你想要什么)<span>{{serviceA.selectedItem.value}}</span>

PS我不喜欢您的控制器名称与对象的相同 - serviceA;

答案 2 :(得分:0)

啊,啊!我得到了它的工作!

做:

<span>{{serviceA.selectedItem.value}}</span>
视图中的

不起作用,因为虽然serviceA被注入到视图的控制器中,但我没有将它分配给范围......所以正确的方法是在控制器中执行此操作:< / p>

angular.module('controllers').controller('someCtrl',
['$scope', 'directDebitService', function ($scope, serviceA) {
    $scope.serviceA= serviceA;
}]);

现在工作正常。