angularjs - как ссылаться на значение, определенное в том же модуле

Я пишу модуль конфигурации, который включает два рецепта.value:

  • BaseUrl
  • количество URL REST API, которые идут в верхней части baseURL

В настоящее время я настроил их как.value, но они могут быть так же легко.constant

Поскольку я хочу иметь возможность изменять baseURL без необходимости переписывать все URL-адреса API, мне нужно сослаться на только что определенный baseURL - в том же модуле:

var configuration = angular.module('configuration', []); 

configuration.value('Config',{
    baseURL : 'http://dev.mysite.com/',     // define Base URL
});

configuration.value('ApiList', {
    getMyDataLink1 : this.baseURL + 'rest/folder1/action1/api_key/',
    getMyDataLink2 : this.baseURL + 'rest/folder2/action2/api_key/',
    getMyDataLink3 : this.baseURL + 'rest/folder3/action3/api_key/',
});

когда я проверяю переменные:

  • Config.baseURL правильно выводит как http://dev.mysite.com/
  • ApiList.getMyDataLink1 определяется только наполовину, так как this.baseURL часть не определена (т.е. она выводит undefinedrest/folder1/action1/api_key/)

Я также попытался определить значение.value ApiList как:

getMyDataLink1 : Config.baseURL + 'rest/folder1/action1/api_key/', 
//or
getMyDataLink1 : baseURL + 'rest/folder1/action1/api_key/', 

но любой из них выдает ошибку "Uncaught ReferenceError: XXXX не определено"...

Можно ли ссылаться на.value из другого.value в том же модуле?

РЕДАКТИРОВАТЬ: см. http://jsfiddle.net/goredwards/yy5xuodh/

РЕДАКТИРОВАТЬ 2: см. http://jsfiddle.net/goredwards/xvj5xcgz/ где я преобразовал 2-е.value в.factory - затем сравните с методом js-only в нижней части скрипки - должен быть более краткий Кстати, чем это?

3 ответа

Решение

Как указывал Гаурав, кажется, что невозможно вставить что-либо в рецепт.value, поэтому самый короткий и ясный способ (с точки зрения удобства обслуживания), который я нашел, - это преобразовать конкатенационный рецепт.value (т.е. 2-й) в.factory рецепт и введите переменную 'Config' .value:

var configuration = angular.module('configuration', []); 

configuration.value('Config',{
    baseURL : 'http://dev.mysite.com/',     // define Base URL
});

configuration.factory('ApiList', ['Config', function(Config){
    return{
        getMyDataLink1 : Config.baseURL + 'rest/folder1/action1/api_key/',
        getMyDataLink2 : Config.baseURL + 'rest/folder2/action2/api_key/',
        getMyDataLink3 : Config.baseURL + 'rest/folder3/action3/api_key/'
    };
}]);

хотя это работает (см. http://jsfiddle.net/goredwards/xvj5xcgz/) и является относительно лаконичным и ясным, кажется странным, что.values ​​нельзя просто объединить с другими.values ​​...

Насколько я знаю, вы не можете ввести зависимость значения в другое значение. Вы можете использовать сервис или фабрику для создания ваших URL-адресов API. Что-то вроде этого:

   configuration.value('Config',{
    baseURL : 'http://dev.mysite.com/',     // define Base URL
});

configuration.value('ApiList', {
    getMyDataLink1 : 'rest/folder1/action1/api_key/',
    getMyDataLink2 : 'rest/folder2/action2/api_key/',
    getMyDataLink3 : 'rest/folder3/action3/api_key/',
});

app.service('URLService', ['Config', 'ApiList', function(Config, ApiList){
    return {
    getURLs : function() {
        var url = Config.baseURL+ApiList.getMyDataLink1;
        return url;
    }
}}]);

Вы пытались внедрить Config в ApiList?

     configuration.value('ApiList', function(Config) {
           getMyDataLink1 : Config.baseURL + 'rest/folder1/action1/api_key/',
           getMyDataLink2 : Config.baseURL + 'rest/folder2/action2/api_key/',
            getMyDataLink3 : Config.baseURL + 'rest/folder3/action3/api_key/',
        });
Другие вопросы по тегам