私はディレクティブを書いており、John Papa スタイル ガイドに固執しようとしています。そのため、構文ワゴンにジャンプすることも決定し、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()
編集
ビューコードを含めますが、心配はいりません - 配管は機能します:
<button class="btn btn-yellow" ng-click="vm.doSubmit(newsletterform)" translate>
footer.ok_button_text
</button>
編集2
結局のところ、@Tek は正しかった - コードは機能する。私がそれを見なかった理由は、(私が思うに) Chrome の JS ランタイム$http
が呼び出されないことを知っているときに最適化するためだと思います。
このコードは正常に動作します。これは、ランタイムが関数呼び出し$http
での使用を予測したためだと思います。console.log()
ただし、その行を削除すると、次のようになります(そもそもこの問題が発生したのはそのためです):
console.log
-をコメントアウトしたことに注意してdoSubmit()
ください$http
。今$http
、コンソールで呼び出すと、定義されていません。