2016-09-23 2 views
0

Вот простой пример того, что я пытаюсь сделать. Я предваряю это, сказав, что я работаю в качестве сопровождающего в течение 3 недель на уже построенном проекте в угловом режиме, и у меня есть несовершеннолетний, в лучшем понимании угловатого на сегодняшний день. я могу работать с контроллерами, представлениями и моделями, все в порядке. но когда приходит время понять вливание зависимостей, меня смущают неопределенные ошибки. Теперь пришло время мне нужно узнать о том, как работает Injector, поэтому вот небольшое тестовое приложение, которое я построил для своих собственных целей обучения. Я действительно не знаю, является ли это правильным способом создания углового приложения. Документация, которую я считаю в лучшем случае запутанной.Угловая зависимость. какого черта я делаю неправильно?

HTML

<div ng-app="app"> 
<div ng-controller="EC as e"> 
</div> 
</div> 

Javascript

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

app.config(['$httpProvider', function($httpProvider) { 
    $httpProvider.interceptors.push(function($q, $window) { 
     return { 
      'request': function(config) { 
       config.headers['Authorization'] = 'bearer '+ $window.localStorage.token; 
       return config; 
      } 
     }; 
    }); 
}]); 

function EC($scope,$http,$window) { 

    var vm = this; 

    vm.api = function(resource){ 
     return ('https://api.website.com/v1/'+resource).replace('//','/'); 
    }; 

    $window.localStorage.token = 'foobar'; 

    $http.put(vm.api('/users/me'), { loggedIn: true }).then(function(response){ 

     $http.get(vm.api('/users/me')).then.function(response){ 
      vm.user = response.data; 
     }); 

    }); 

} 

EC.$inject = ['$scope','$http','$window']; 

app.controller('EC',EC); 

app.run(); 

Я предположил, что линия EC.$inject = ['$scope','$http','$window']; будет страховать, что мой контролеры конструктор будет вызван с этими услугами, или как там они называются , как аргументы. По-видимому, это не так. Может кто-нибудь объяснить мне, как мне 5, как это работает, и почему я получаю сообщение об ошибке?

Сообщение об ошибке:

Error: [$injector:modulerr] http://errors.angularjs.org/1.5.6/$injector/modulerr 

ответ

1

Это просто плохая разметка. Fiddle показывая вам рабочий код

Изменить:

.then 
     .function(response) { 
     vm.user = response.data; 

в

.then(function(response) { 
     vm.user = response.data; 
+0

Фактическая проблема заключается в том, что я не знал, что должен был включить дополнительные файлы для $ http, которые будут доступны. ваша скрипка показывает, что на самом деле неправильно, но по-другому. код, который я предоставил, является просто манекеном, поэтому синтаксическая ошибка была красной селедкой в ​​моих попытках сделать краткий пример, иллюстрирующий проблему. после применения недостающих ресурсов мой код теперь работает. Я ценю ваши усилия. – r3wt

+1

Это была проблема с инъекцией на 100%. Я не сомневаюсь, что в коде есть другие вещи. – Nix

+0

И у вас нет других файлов для $ http – Nix

1

переписаны блок контроллера следовать более conventionaly инъекции. Может тренироваться для тебя. Также удалена обратная связь с двойным ответом из вызовов $ http и возвращается обещание $ http.get().

angular.module('app', []) 



.config(['$httpProvider', function($httpProvider) 
{ 
    $httpProvider.interceptors.push(function($window) 
    { 
    return { 
     request: function(config) 
     { 
     config.headers['Authorization'] = 'bearer '+ $window.localStorage.token; 
     return config; 
     } 
    }; 
    }); 
}]) 



.controller('EC', ['$scope', '$http', '$window', function($scope, $http, $window) 
{ 
    var buildApiString = function(resource) 
    { 
    return ('https://api.website.com/v1/'+resource).replace('//','/'); 
    }; 


    $window.localStorage.token = 'foobar'; 


    $http.put(buildApiString('/users/me'), { loggedIn: true }).then(function() 
    { 
    return $http.get(buildApiString('/users/me')).then(function(response) 
    { 
     $scope.user = response.data 
    }); 
    }); 
}]); 
Смежные вопросы