我在寫一個指令並試圖堅持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
服務。
所以我的問題:我怎樣才能從doSubmit()
功能訪問注入$http
?
編輯
我會包括視圖代碼 - 但沒有後顧之憂 - 管道工程:
<button class="btn btn-yellow" ng-click="vm.doSubmit(newsletterform)" translate>
footer.ok_button_text
</button>
EDIT 2
事實證明,@Tek是正確 - 代碼有效。我認爲我沒有看到它的原因是因爲(我認爲)Chrome中的JS運行時知道它不會被調用時優化了$http
。
此代碼工作正常。我認爲這是因爲運行時預計在console.log()
函數調用中使用$http
。但是 - 如果我刪除了這一行我得到這個(這就是爲什麼我在首位這個問題):
請注意,我註釋掉console.log
- 因此doSubmit()
電話從不使用$http
。現在 - 當我在控制檯中撥打$http
時 - 沒有定義。
這很奇怪 - 不能讓它自己工作。有趣的風格指南 - 我今天早上剛剛閱讀這傢伙的博客。使用John Papa's的原因是因爲我聽說它會使轉換到Angular v2更容易。 –
我想出了問題所在 - 你可能會對我更新的問題感興趣。 –