У меня есть угловое приложение, которое имеет следующий код в скрипте:Функция внутри завода не доступны из пользовательской директивы
var myApp = angular.module('myApp', []);
myApp.controller('Ctrl', function($scope, FileAccessor) {
$scope.countrynames = []
});
myApp.directive('country', function() {
var directiveDefinitionObject = {
restrict: 'E',
templateUrl: 'partials/scape.html',
controllerAs: 'dm',
compile: function(scope, FileAccessor) {
FileAccessor.fetchCountryDetails('https://restcountries.eu/rest/v1/all').success(function(response) { //assigning the fetched countries to the scope object var
scope.countrynames = response;
});
}
}
return directiveDefinitionObject;
})
myApp.factory("FileAccessor", ['$http', function($http) {
return {
fetchCountryDetails: function(url) {
return $http.get(url);
}
}
}]);
Внутри scape.html, следующий код помещается:
<div ng-controller="Ctrl" class="container" style="height:500px" >
<select ng-model="model" ng-options="obj.name for obj in countrynames | orderBy: '-population'" placeholder="Select" autofocus>
<option value="">- Please Choose -</option>
</select>
{{model.name}}
{{model.currencies[0]}}
</div>
Как мы видим, я пытаюсь получить доступ к функции, которая помещается внутри фабрики, FileAccessor
из пользовательской директивы, country
.
Когда я запустить его в браузере, то эта ошибка, которая появляется на консоли: angular.min.js: 86 TypeError: FileAccessor.fetchCountryDetails не функция
Может кто-нибудь объяснить, что пошло не так, вместе с фиксированный код?
P.S. Я хочу, чтобы HTTP-запросы обрабатывались только через фабрику (как требование).
Edit 1: Включая ссылку Plunkr здесь: http://plnkr.co/edit/gXQKBd?p=info
Я тоже это пробовал. Но это не собирало данные. В ближайшее время я отредактирую свой вопрос с помощью plunkr. Пожалуйста, изучите его. – user5649133
@CozyAzure - это право, проверка скрипта https://jsfiddle.net/ebinmanuval/5hdfz0a1/ –
@EbinManuval, пожалуйста, загляните в этот plunkr http://plnkr.co/edit/gXQKBd?p=info – user5649133