Angular 1.5范围变量在$ http服务成功回调中未定义

时间:2016-04-08 22:17:20

标签: angularjs angularjs-scope angular-controller angular-component-router

给出以下Angular 1.5组件控制器......

class user < ActiveRecord::Base
  belongs_to :shop
  has_many :tasks, before_add: :assign_to_shop

  def assign_to_shop(task)
    task.shop = self.shop
    ...
  end
end

我正在尝试将一批AJAX查询结果返回到正确的相应表单对象。似乎this.myVarArray在$ http服务成功回调的上下文中是未定义的。为什么是这样?这是Angular或Javascript本身的怪癖吗?我知道$ http服务返回一个promise,但是应该在回调的上下文中解析。为什么myVarArray未定义?

非常感谢任何见解。

编辑:修复了我的示例代码......:)

1 个答案:

答案 0 :(得分:1)

this.myVarArray是一个字符串数组,基于从解析中的原始输入中拆分的内容。您正在尝试将对象属性(.meta)分配给字符串数组元素。您可以尝试以下方式:

this.myVarObjArray;
this.rawInput = '';

this.parse = function(){
    var temp = this.rawInput.split(' ');
    var valArray = []
    for( var i = 0; i < temp.length; i++){
        valArray.push(angular.copy(temp[i]));
        this.myVarObjArray[i] = { val: valArray};
    }

}

this.upload = function(){
    angular.forEach(this.myVarObjArray, function(obj,v){
        $http({
            method: 'POST',
            url: <url here>,
            data: obj.val
        }).then(function(response){
            //My Success callback won't work!!!!
            //Response logs successfully, data is retrieved
            console.log(response);
            //this.myVarArray.meta is undefined??
            //console.log(this.myVarArray) is undefined
            obj.meta = {reply :response.data};
....
    })

基本上你试图将一个对象属性分配给一个字符串数组元素。这不会奏效。我的语法可能不是100%。如果你进入一个傻瓜,我会为你找一个有效的例子。这可以让你走上正确的轨道。