2014-09-11 2 views
0

Что мне нужно знать, как я могу использовать такую ​​услугу, как $ http вне функции $ get, или это даже возможно? Мой код идет и загружает json-файл, который предоставляет словарь, который мое приложение использует по-разному. Я хочу, чтобы пользователи могли настраивать этот словарь, поэтому я использую метод расширения jquery, чтобы пользователи могли добавлять значения к объекту и расширять словарь. Метод экземпляра в коде ниже обрабатывает все это. То, что я хотел бы быть в состоянии сделать это настроить свою службу как такНастройка службы, которая зависит от другой службы angularjs

config(['_sys_dictionaryProvider', function(_sys_dictionaryProvider) { 
    _sys_dictionaryProvider.instansiate('config/dictionary/custom/dictionary.json'); 
}]) 

Но это требует $http услуг должны быть доступны во время конфигурации, и я не думаю, что это. Если я положу услугу $http как часть свойства $ get, он будет работать, как объясняется here, за исключением того, что сеть должна запрашиваться каждый раз, когда используется служба. Есть ли способ использовать службу в конфигурации другой службы?

Полный код ниже, дайте мне знать, если мне нужно уточнить.

app.provider("_sys_dictionary", ['$http', 
    function ($http) { 
     var dictionary, 
      DictionaryService = function() { 
       this.definitions = dictionary; 
       this.define = function (what) { 
        var definitions = this.definitions; 
        if (what instanceof Array) { 
         for (var i = 0; i < what.length; i++) { 
          definitions = definitions[what[i]]; 
         } 
         return definitions; 
        } 
        return this.definitions[what]; 
       }; 
      }; 
     return { 
      $get: function() { 
       return new DictionaryService(); 
      }, 
      instansiate: function (path) { 
       $http.get('config/dictionary/dictionary.json').success(function (data) { 
        dictionary = data; 
        $http.get(path).success(function (data) { 
         jQuery.extend(true, dictionary, data) 
        }); 
       }); 
      } 
     }; 
    } 
]); 

ответ

0

Видя, как я не считаю, что можно использовать службу на этапе конфигурации, так как нет никакого способа, чтобы гарантировать, что сервис вы используете себя настроен, я пошел этот маршрут вместо

app.provider("_sys_dictionary", function() { 
    var dictionary, 
     DictionaryService = function() { 
      this.definitions = dictionary; 
      this.define = function (what) { 
       var definitions = this.definitions; 
       if (what instanceof Array) { 
        for (var i = 0; i < what.length; i++) { 
         definitions = definitions[what[i]]; 
        } 
        return definitions; 
       } 
       return this.definitions[what]; 
      }; 
     }; 
    return { 
     $get: [ 

      function() { 
       console.log(dictionary); 
       return new DictionaryService(); 
      } 
     ], 
     instansiate: function (path) { 
      jQuery.ajax({ 
       url: 'config/dictionary/dictionary.json', 
       success: function (data) { 
        dictionary = data; 
        jQuery.ajax({ 
         url: path, 
         success: function (data) { 
          jQuery.extend(true, dictionary, data); 
         }, 
         async: false 
        }); 
       }, 
       async: false 
      }); 
     } 
    }; 
}); 

Я закончил использование объекта ajax jquery и превратил асинхронный в false, так как мне нужен словарь, который будет готов до того, как служба будет использоваться. Надеюсь, это поможет кому-то. Если кто-то знает лучший способ сделать это, я бы хотел узнать.

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