Ответ 1
EDITED
Похоже, что вы пытаетесь настроить службу с параметрами. Чтобы загружать внешний файл конфигурации асинхронно, вам придется загружать приложение angular самостоятельно внутри полного обратного вызова загрузки данных, вместо использования автоматической развертки.
Рассмотрим этот пример для определения службы, на самом деле не имеющего URL-адреса службы (это будет что-то вроде contact-service.js
):
angular.module('myApp').provider('contactsService', function () {
var options = {
svcUrl: null,
apiKey: null,
};
this.config = function (opt) {
angular.extend(options, opt);
};
this.$get = ['$http', function ($http) {
if(!options.svcUrl || !options.apiKey) {
throw new Error('Service URL and API Key must be configured.');
}
function onContactsLoadComplete(data) {
svc.contacts = data.contacts;
svc.isAdmin = data.isAdmin || false;
}
var svc = {
isAdmin: false,
contacts: null,
loadData: function () {
return $http.get(options.svcUrl).success(onContactsLoadComplete);
}
};
return svc;
}];
});
Затем, когда документ готов, вы должны сделать вызов для загрузки вашего файла конфигурации (в этом случае, используя jQuery). В обратном вызове вы затем выполнили свой angular app.config с использованием загруженных json-данных. После запуска .config вы вручную загрузите приложение вручную. Очень важно: не используйте директиву ng-app, если вы используете этот метод, или angular будет загружать себя. Подробнее см. этот url:
http://docs.angularjs.org/guide/bootstrap
Так же:
angular.element(document).ready(function () {
$.get('/js/config/myconfig.json', function (data) {
angular.module('myApp').config(['contactsServiceProvider', function (contactsServiceProvider) {
contactsServiceProvider.config({
svcUrl: data.svcUrl,
apiKey: data.apiKey
});
}]);
angular.bootstrap(document, ['myApp']);
});
});
UPDATE: Вот пример JSFiddle: http://jsfiddle.net/e8tEX/