我的代码就像这样
$scope.shipment = new function () {
this.type = "";
this.carrier = "";
this.sInstruction = "";
this.getInfo = function () {
if (this.type == 'collect-parcel') {
$http.post('../services/getratesws.aspx', { 'Content-type': 'application/json' }).
success(function(data) {
this.sInstruction = data;
});
}
};
}
正如你所看到的,我正试图为" sInstruction"设定价值。我的功能。但是没有采用这个价值而且" sInstruction"仍然是空的。任何人都可以指出我做错了什么?
答案 0 :(得分:3)
当你在函数中使用'this'时,你无法确定它是否与主函数相同,因为在javascript中每个函数都有它自己的范围。
尝试执行以下操作:
在函数前的代码中设置:
var that = this;
在
中使用'that'答案 1 :(得分:2)
您已在功能this.sInstruction
中设置了$scope.shipment
,因此您可以在功能发货范围内使用sInstruction
。现在你正在尝试
$http.post('../services/getratesws.aspx', { 'Content-type': 'application/json' }).
success(function(data) {
this.sInstruction = data;
});
这显然不起作用,因为成功函数中的这个仅限于成功函数的范围。
此问题的解决方案是将this
从发货功能保存到变量中,然后在成功功能中使用它。
你可以这样做,
在定义属性的函数中设置var temp=this
。即在您的情况下,这应该在功能装运中设置,但应该超出任何其他嵌套功能。
现在您可以使用temp.sInstruction = data;