在解析的promise中使用angular.extend绑定数据的正确方法

时间:2015-10-13 21:43:28

标签: javascript angularjs

我试图将我的角度代码从 this.vm 更改为 angular.extend ,以便在使用时更加清晰地了解私有和公共变量/方法控制器作为语法,但我无法从已解决的承诺中获取数据绑定。

// public data to view

var resolvedData;
var otherVar;

angular.extend(this, {
  myVar: resolvedData,
  mySecondVar: otherVar
})

myFactoty.action().then(function(data){
  resolvedData = data;
})

这里我没有任何数据绑定到我的视图,但当我尝试这样的时候:

// public data to view

var resolvedData;
var otherVar;

angular.extend(this, {
  myVar: resolvedData,
  mySecondVar: otherVar
})

myFactoty.action().then(function(data){
  angular.extend(this, {
    myVar: data
  })
})

我得到了:无法读取属性' $$ hashKey'未定义的。

如何以正确和良好的实践方式获取数据绑定?

感谢。

1 个答案:

答案 0 :(得分:1)

我不确定您尝试实现的清晰度但是您已经遇到了this的上下文问题,而不是您希望它在promise回调中的内容< / p>

// always store a reference to `this`
var vm= this;

myFactoty.action().then(function(data){
  //   this != vm because it's inside a function closure
  angular.extend(this, { // won't work
    myVar: data
  });
});

所以扩展控制器使用任何闭包中存储的引用

myFactoty.action().then(function(data){
  angular.extend(vm, {
    myVar: data
  });
});