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

angularjs:使用服务在控制器之间通信,angularjs,angularjs-service,Angularjs,Angularjs Service,我有一个注入控制器的服务。该服务定义了许多功能 现在,我想向该服务添加一个变量,用于在应用程序中保存selectedItem。我是这样做的: angular.module('myservices', []). factory('serviceA', function () { var serviceA= { selectedItem: selectedItem, ... more functions here };

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

现在,我想向该服务添加一个变量,用于在应用程序中保存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>
{{serviceA.selectedItem.value}
即使selectedItem设置正确,范围也不会更新。我做错了什么

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>
{{someItem.value}
或者(我真的不知道你想要什么)
{{serviceA.selectedItem.value}


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

要访问视图中的服务,需要将其分配给作用域:

$scope.serviceA=serviceA


啊!我成功了

做:

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

现在一切正常

几天前我用这把小提琴来处理控制器之间的通信:(对不起,我不记得是谁先做的)。此小提琴使用事件来完成($scope.broadcast)。我建议您保留该服务,并在此服务中触发事件我希望避免使用广播。事实上,angularjs中的服务是单例的,这就是为什么我想在控制器之间使用它来共享变量。我只使用广播和发射进行定向这很好。我还更新了演示以检查自己。我已经在你面前发布了我自己的答案。但我会接受你的。谢谢你的帮助!我从来没有这样做过,这是必须的吗?如果没有它,我的代码可以正常工作,我可以从控制器中调用像` serviceA.someFunction()'这样的函数。我只是对selectedItem变量有一个问题。谢谢您的编辑。请看我的答案,因为我需要将服务本身添加到范围中。这样,我可以将视图直接绑定到服务的变量,该变量在控制器之间共享,即:如果一个控制器修改该值,则属于另一个控制器的视图将自动显示更改。不用担心名字,我已经全部更改了,但在我的真实代码中,它们的名字不同。谢谢你的帮助!
angular.module('controllers').controller('someCtrl',
['$scope', 'directDebitService', function ($scope, serviceA) {
    $scope.serviceA= serviceA;
}]);