2015-10-08 2 views
0

Мне нужна служба, которая предоставляет мне область или динамический var, поэтому я перехожу к другим контроллерам.Угловое обслуживание с динамическим объемом или var

Я сделал тест на JSBin и не работал.

https://jsbin.com/semozuceka/edit?html,js,console,output

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]; 
    }; 

}); 
+0

Вы не можете вводить $ scope внутри своего сервиса. – Nicolas2bert

ответ

0

Не пытайтесь использовать $scope, потому что он будет пытаться использовать scopeProvider. Вы не можете вводить его в службу. Кроме того, вход для службы представляет собой массив (который содержит функцию), а не только функцию.

Сказав это, вам действительно не нужна область действия, если вы отслеживаете свои переменные внутри своего сервиса.

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

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

JSbin

1

Я хотел бы пойти на службу на заводе, так как нет необходимости создавать пользовательский. Учитывая функциональность контроллеров, я создал простую фабрику, например, так:

.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). Итак, чтобы подвести итог, эта функция проверяет, есть ли переданный параметр атрибута и возвращает соответствующие данные.

Работает plunker.

Вы можете узнать больше о различных Угловых провайдерах и о сравнении между ними в официальном documentation.

Наслаждайтесь!

Смежные вопросы