AngularJS - 指令 - 调用 $http(POST) 的 onClick 函数 - $http 未定义?
AngularJS - Directive - onClick function calling $http(POST) - $http is undefined?
我有一个 AngularJS 指令,它使用 $http (ng.IHttpService) 从 api 调用数据没有问题。
我将 'click' 事件绑定到一个函数,并想在同一个 api 控制器上调用 POST 请求以将一些数据放入数据库中。
这是指令
import { Advert } from "../entities";
interface AdvertScope extends ng.IScope {
advert: Advert;
}
export class AdvertDirective implements ng.IDirective {
restrict = 'EA';
templateUrl = '/AngularViews/adverts.html';
scope = {}
constructor(private $http: ng.IHttpService) { }
public link = (scope: AdvertScope, elem: JQuery, attributes: ng.IAttributes, ngModel: ng.INgModelController) => {
this.$http.get<Advert>('/api/adverts/get-adverts')
.then(response => {
scope.advert = response.data;
});
elem.bind('click', function (e: any): void {
var advertId = e.path[0].id;
if (advertId != null && advertId != undefined) {
var data = { advertId: advertId };
// This is just a fire-and-forget post - no success/error handling
this.$http.post('/api/adverts/log-click', JSON.stringify(data));
}
});
}
static factory(): ng.IDirectiveFactory {
var directive = ($http: ng.IHttpService) => new AdvertDirective($http);
directive.$inject = ['$http']
return directive;
}
}
问题是,当点击事件被点击时,错误:
Uncaught TypeError: Cannot read property 'post' of undefined
生成。
当你写'function''时,所以'this'指的是函数本身。
您只需将 "function" 替换为 () =>{}
,如下所示:
elem.bind('click', (e: any): void=> {
var advertId = e.path[0].id;
if (advertId != null && advertId != undefined) {
var data = { advertId: advertId };
// This is just a fire-and-forget post - no success/error handling
this.$http.post('/api/adverts/log-click', JSON.stringify(data));
}
});
我有一个 AngularJS 指令,它使用 $http (ng.IHttpService) 从 api 调用数据没有问题。
我将 'click' 事件绑定到一个函数,并想在同一个 api 控制器上调用 POST 请求以将一些数据放入数据库中。
这是指令
import { Advert } from "../entities";
interface AdvertScope extends ng.IScope {
advert: Advert;
}
export class AdvertDirective implements ng.IDirective {
restrict = 'EA';
templateUrl = '/AngularViews/adverts.html';
scope = {}
constructor(private $http: ng.IHttpService) { }
public link = (scope: AdvertScope, elem: JQuery, attributes: ng.IAttributes, ngModel: ng.INgModelController) => {
this.$http.get<Advert>('/api/adverts/get-adverts')
.then(response => {
scope.advert = response.data;
});
elem.bind('click', function (e: any): void {
var advertId = e.path[0].id;
if (advertId != null && advertId != undefined) {
var data = { advertId: advertId };
// This is just a fire-and-forget post - no success/error handling
this.$http.post('/api/adverts/log-click', JSON.stringify(data));
}
});
}
static factory(): ng.IDirectiveFactory {
var directive = ($http: ng.IHttpService) => new AdvertDirective($http);
directive.$inject = ['$http']
return directive;
}
}
问题是,当点击事件被点击时,错误:
Uncaught TypeError: Cannot read property 'post' of undefined
生成。
当你写'function''时,所以'this'指的是函数本身。
您只需将 "function" 替换为 () =>{}
,如下所示:
elem.bind('click', (e: any): void=> {
var advertId = e.path[0].id;
if (advertId != null && advertId != undefined) {
var data = { advertId: advertId };
// This is just a fire-and-forget post - no success/error handling
this.$http.post('/api/adverts/log-click', JSON.stringify(data));
}
});