如何从angularjs中的服务访问控制器值?

时间:2015-07-17 08:57:35

标签: javascript angularjs angularjs-service

我想从服务中访问控制器值,如何访问它。我尝试使用以下代码访问控制器值。 http://www.ng-newsletter.com/posts/directives.html

    <script>

    var app = angular.module('app', [])
.controller("ctrl1",['$scope','svc',function($scope,svc){

    $scope.fun1=function(){
      svc.service_set();

      alert(svc.txt1);
      alert(svc.txt2);

    }

}])
.controller("ctrl2",['$scope','svc',function($scope,svc){

    $scope.fun2=function(){
        svc.service_set();

        alert(svc.txt1);
        alert(svc.txt2);
    }

}]).
service("svc",function(){
      var svc={};
      svc.service_set=function()
      {
        //I want to access the controller values from here
        svc.txt1=ctrl1.c1txt1; 
        svc.txt2=ctrl2.c2txt1;

      }

      return svc;
    })
;

    </script>

2 个答案:

答案 0 :(得分:1)

您不应在服务中使用控制器。服务旨在用作可重用逻辑的容器。不是从服务调用控制器,而是从控制器

调用服务方法

答案 1 :(得分:0)

如果要在服务中存储控制器值,请通过与控制器的连接传递值。或者在您的情况下,$scope

.service(function () {
  var dataStore = {};

  this.set = function (ctrl, value) {
    dataStore[ctrl] = value;
  });

  this.get = function (ctrl) {
    return ctrl ? dataStore[ctrl] : dataStore;
  };
});

updated your jsbin

我会重新考虑你的做法;如果控制器中存在需要由其他控制器访问的值,则所述值应从服务和/或工厂发起。或者甚至只是constants / values

控制器然后将获取它想要的值,可能修改它们,并将任何修改发送回服务以保持同步。

  

控制器是您的服务与视图之间的粘合剂,而不是相反。