2016-03-01 57 views
0

我想从回调中设置一个变量我试过$应用,但我得到错误,申请是冲突的,经过一些研究后,我发现我应该使用$超时而不是$应用。所以我改变了代码,如下所示。在sharepoint 365 Angularjs

myApp.controller('dynamicCtrl', ['$scope', '$timeout', function ($scope, $timeout) { 


    var jsonObj = []; 

    jsonObj.push({ 
     "type": "text", 
     "model": "text", 
     "label": "text", 
     "placeholder": "text" 
    }); 

    //$scope.stdFormTemplate = jsonObj; 
    var ctx = new SP.ClientContext.get_current(); 
    var web = ctx.get_web(); 
    var list = web.get_lists().getByTitle('TITLE'); 
    var listFields = list.get_fields(); 
    clientContext.load(listFields); 

    ctx.load(listFields); 
    ctx.executeQueryAsync(function() { 

     onListFieldsQuerySucceeded(setJsonData); 
    }, 
    function (sender, args) { 
     console.log(args); 
    }); 







    function onListFieldsQuerySucceeded(callback) { 
     var type = ""; 
     var fieldEnumerator = listFields.getEnumerator(); 
     while (fieldEnumerator.moveNext()) { 
      var oField = fieldEnumerator.get_current(); 
      var fType = oField.get_fieldTypeKind(); 
      if (fType === SP.FieldType.choice) { 

      } else if (fType === SP.FieldType.text) { 

      } 


     } 

     callback(jsonObj); 
    } 







    function setJsonData(jsonObj) { 


     $timeout(function() { 
      alert("hithere" +jsonObj); 
      $scope.stdFormTemplate = jsonObj; 
     }, 0); 

    } 

    $scope.stdFormData = {}; 
    $scope.urlFormData = {}; 
}]); 

我试图在功能setJsonData实现这一目标,我可以看到警报,但仍如预期$ scope.stdFormTemplate是不会得到更新。

我正在尝试使用this库。

+0

看看Angular或jQuery中的延迟对象 – Shawn

回答

0

我推荐使用$ q和承诺。 您可以将工厂/服务中的数据访问外部化,并使用promise来处理任何异步数据访问操作。

myApp.service('spAccess', function($q) { 
    this.getListData = function (listName) { 
     var deferred = $q.defer(); 
     var ctx = SP.ClientContext.get_current(); 
     var list = ctx.get_web().get_listByTitle(listName); 
     ctx.load(list); 
     ctx.executeQueryAsync(function() { 
      var items = []; 
      // Get your data here 
      deferred.resolve(items);     
     }, function(err, args){ 
      deferred.reject([err, args}); 
     }); 

     return deferred.promise; 
    }; 
}); 

myApp.controller('ctrl', function(spAccess, $scope){ 
    spAccess.getListData('MY LIST').then(function(result){ 
     $scope.items = result; 
    }, function(err){ 
     console.log(err); 
    }); 
}); 

// NOTE: Code was untested, and written on-the-fly, so some minor adjustments/fixes may be neccesary. 
相关问题