簡體   English   中英

具有動態范圍或變量的Angular Service

[英]Angular Service with dynamic scope or var

我需要一個為我提供作用域或動態var的服務,因此我將繼續使用其他控制器。

我在JSBin上進行了測試,但無法正常工作。

https://jsbin.com/semozuceka/edit?html,js,控制台,輸出

angular.module('app', [])

.controller('control1', function($scope, shared) {
    shared.set('teste', {
        testecontroller1: "Apenas um teste"
    });
    $scope.teste = shared.get();
    $scope.teste2 = shared.get();
})

.controller('control2', function($scope, shared) {

    $scope.teste = shared.get('teste');
    shared.set('teste2', {
        testecontroller2: "Apenas um teste"
    });
    $scope.teste2 = shared.get('teste2');

})

.service('shared', function($scope) {

    $scope.data = {};

    this.set = function(key, obj) {
        $scope.data[key] = obj;

    };

    this.get = function(key) {
        return $scope.data[key];
    };

});

我將尋求工廠服務,因為無需創建自定義服務。 鑒於控制器的功能,我創建了一個簡單的工廠,如下所示:

.factory('shared', function() {
  var shared;
  var data = {};

  shared = {
    set: setFunc,
    get: getFunc
  };

  return shared;

  function setFunc(key, input){
    data[key] = input;
  }

  function getFunc(key){
    if(key)
      return data[key];
    else return data;
  }
})

可能需要澄清的唯一部分是getFunc control1 ,您想要獲取data對象而不指定任何屬性。 但是,您在control2確實指定了,這導致了條件if(key) 綜上所述,此函數檢查是否存在傳遞的屬性參數並返回適當的數據。

這是一個正在工作的朋克

您可以在官方文檔中了解有關不同Angular提供程序的更多信息以及它們之間的比較。

請享用!

不要嘗試使用$scope ,因為它將嘗試使用scopeProvider 您不能將其注入服務。 同樣,服務的輸入是一個數組(包含一個函數),而不僅僅是一個函數。

話雖如此,但是如果您跟蹤服務中的變量,則根本不需要范圍。

.service('shared', [function() {
    var data = {};

    return {
        set: function(v, val) {
            data[v] = val;
        },
        get: function(v) {
            return (v)? data[v]: data;
        }
    };
}]);

吉賓

暫無
暫無

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

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