将赋值替换为延迟赋值

时间:2016-01-30 00:34:30

标签: javascript angularjs promise angular-promise

在我的angular.js页面中,我使用我需要的所有属性扩展$ scope。 之前,我只是用

扩展了$ scope
angular.extend($scope,{
    myAttr : aService.getValues()
});

然而,结果我必须向aService.getValues添加一个promise(角度文件访问)。因此,我不能保持上面的语法,但必须用

替换它
angular.extend($scope,{
myAttr : null
});
aService.getValues().then(function(values){$scope.myAttr = values;})

这很烦人,因为我必须更换相当多的代码,并且害怕添加错误。任何替代方案?

1 个答案:

答案 0 :(得分:1)

我唯一可以建议的是对自己的解决方案稍微更漂亮一点:

aService.getValues().then(function(values) {
  angular.extend($scope, {
    myAttr: values
  })
});

$scope同步扩展至关重要吗?如果是的话,我也没有看到任何其他方式将异步数据提供给它的方式。

修改

如果您正在重新修改逻辑,请考虑将$stateProviderresolve属性一起使用:https://github.com/angular-ui/ui-router/wiki(向下滚动到讨论解决方案的部分)。简而言之,resolve中的所有内容必须在状态控制器初始化之前运行。通过这种方式,您可以在解决方案中执行所有异步操作,并且只有在您拥有所需的所有内容后才能加载它。