Я пишу директиву и пытаюсь придерживаться John Papa style guide. Так я и решил перейти на ControllerAs
синтаксиса вагона и у меня есть маленькая директива, как показано ниже:AngularJS ControllerAs синтаксис и введенные переменные контроллера
(function() {
angular
.module('htApp')
.directive('newsletterSignup', newsletter_signup);
function newsletter_signup($http) {
var directive = {
templateUrl: '../whatever.tpl.html',
restrict: 'EA',
controller : controller,
controllerAs: 'vm',
bindToController: true
};
return directive;
controller.$inject = ['$http'];
function controller($http) {
var vm = this;
// $http is here ... all is good, but I don't need it
function doSubmit(form) {
// I need $http here, but it is null
debugger;
};
vm.doSubmit = doSubmit;
}
}
})();
Это услуга подписке на рассылку. Мне нужно будет выполнить HTTP-запрос, поэтому я ввожу его в контроллер. Все в порядке - но вызов функции vm.doSubmit(--formname-here--)
из шаблона приводит к тому, что я не могу найти услугу $http
.
Так что мой вопрос: как я могу получить доступ к введенному $http
от функции doSubmit()
?
EDIT
Я буду включать код вида - но не беспокойтесь - сантехника работает:
<button class="btn btn-yellow" ng-click="vm.doSubmit(newsletterform)" translate>
footer.ok_button_text
</button>
EDIT 2
Как выясняется, @Tek был right - код работает. Я думаю, что причина, по которой я этого не видел, состояла в том, что (я думаю) JS runtime в Chrome оптимизирует $http
, когда он знает, что это не будет вызвано.
Этот код работает отлично. Я думаю, что это связано с тем, что во время выполнения было задействовано использование $http
в вызове функции console.log()
. Однако - если я удалю эту линию я получаю это (именно поэтому я имел эту проблему в первую очередь):
Обратите внимание, что я закомментировал console.log
- таким образом doSubmit()
вызов не использует $http
. Теперь - когда я вызываю $http
в консоли - он не определен.
Это странно - не может заставить его работать самостоятельно. Интересный стиль руководства - я просто читал блог этого парня сегодня утром. Причина использования John Papa's заключается в том, что я слышал, что это облегчит переход на Angular v2. –
Я понял, в чем проблема: вас может заинтересовать мой обновленный вопрос. –