簡體   English   中英

如何從angularjs中的服務訪問控制器值?

[英]How to access the controller value from service in angularjs?

我想從服務訪問控制器值,如何訪問它。 我嘗試通過使用以下代碼訪問控制器值。 代碼在這里JsBin.com

    <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>

您不應在服務內部使用控制器。 服務旨在用作可重用邏輯的容器。 不是從服務中調用控制器,而是從控制器中調用服務方法

如果要在服務中存儲控制器值,請將該值與連接傳遞給控制器​​。 或者您的情況是$scope

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

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

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

更新了您的jsbin


我會重新考慮您的方法; 如果存在駐留在控制器中的值需要其他控制器訪問,則所述值應源自服務和/或工廠。 甚至只是普通的constants / values

然后,控制器將獲取所需的值,可能會對其進行修改,並將所有修改發送回服務,以便保持同步。

控制器是服務和視圖之間的粘合劑,而不是相反。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM