我正在尝试从回调中设置变量我试过$ apply但是我得到错误,$ apply是冲突的,经过一些研究我发现我应该使用$ timeout而不是$ apply。所以我改变了代码,如下所示。
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 :(得分:0)
我建议使用$ q和promises。 您可以在工厂/服务中外部化数据访问,并使用promises来处理任何异步数据访问操作。
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.