2

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

现在我想向该服务添加一个变量,该变量将在应用程序中保存 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 设置正确。我究竟做错了什么 ?

4

3 回答 3

7

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

$scope.serviceA = serviceA;

http://jsfiddle.net/MzJsZ/

于 2013-08-28T08:26:51.480 回答
1
angular.module('myservices', []).factory('serviceA', function () {        
  return {

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

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

    var selectedItem;
    ... functions go here

}

});

这行得通吗?你错过了 return{} 部分,一切都在那里。如果您要使用服务,您只需编写 this.serviceA={...}

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

$scope.someItem= serviceA.selectedItem; 

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

然后在你的范围内

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

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

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

于 2013-08-28T08:10:33.120 回答
0

啊!我让它工作了!

正在做 :

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

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

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

现在工作正常。

于 2013-08-28T08:39:06.393 回答