由于异步调用,angularJS数据不可用

时间:2013-07-19 12:58:23

标签: javascript jquery html5 angularjs

这是我的控制者:

function TestCtrl ($scope, sharedProperties, $resource){
    var userDataProfile = sharedProperties.getUserDataProfile();
    var userCreatedBoard = $resource('/boards?owner=:owner');
    userCreatedBoard.query({'owner':userDataProfile.id}, function (result) {
        console.log(result);
    });
}

现在问题是在调用第三方服务及其异步后调用sharedProperties.setUserDataProfile()。因此,当绑定TestCtrl时,userDataProfile实际上为空。如何处理这种情况,以便在调用sharedProperties.setUserDataProfile()并为变量分配第3方服务的值后,只有我的控制器应该被绑定?

2 个答案:

答案 0 :(得分:1)

我想你想看看决心:

http://www.youtube.com/watch?v=Kr1qZ8Ik9G8

这允许您在实例化控制器并触发routeChangeSuccess事件之前加载所有数据。

angular docs中。

答案 1 :(得分:-1)

将变量传递给Angular.js控制器是没有意义的,这就是Scope变量的用途。

试试这个

window.activeTestCtrls = [];
window.sharedProperties = [];
function TestCtrl ($scope, $resource){
  if (window.sharedProperties) this.createUserData(window.sharedProperties) 
  window.activeTestCtrls.push[this];    
  function createUserData(sharedProperties) {
    var userDataProfile = sharedProperties.getUserDataProfile();
    var userCreatedBoard = $resource('/boards?owner=:owner');
    userCreatedBoard.query({'owner':userDataProfile.id}, function (result) {
    console.log(result);
  }
});

// and when you get your sharedproperties
function gotSharedProperties(sharedProperties) {
  $.each(activeTestControllers, function(index,value) {      
     activeTestControllers[index].createUserData(sharedProperties)})
  }
}