【发布时间】:2015-03-27 08:51:19
【问题描述】:
大家好,我在获取 $scope 值时遇到了问题。我想通过使用 AngularjS 来显示价值。
var deferred = $.Deferred();
var items;
var json;
//App.js
$(document).ready(function () {
retrieveListItems();
});
function retrieveListItems() {
var siteCollectionUrl = '/sites/DeverloperSite/';
var context = new SP.ClientContext(siteCollectionUrl);
var list = context.get_web().get_lists().getByTitle("StudentList");
var queryText = "<Query><Where><And><IsNotNull><FieldRef Name='Title' /></IsNotNull><IsNotNull><FieldRef Name='School' /></IsNotNull></And> </Where></Query>";
var query = new SP.CamlQuery();
query.set_viewXml(queryText);
items = list.getItems(query);
context.load(items);
context.executeQueryAsync(
function retrieveListItemSuccess() {
var listDetails = "";
var listEnumerator = items.getEnumerator();
while (listEnumerator.moveNext()) {
var listItem = listEnumerator.get_current();
//list Details is String Object
listDetails += '{"id":"' + listItem.get_id() + '","name":"' + listItem.get_item("Title") + '","school":"' + listItem.get_item("School") + '","gender":"' + displayGender(listItem.get_item("Gender")) + '"},';
}
var stringObject = listDetails.substring(0, listDetails.length - 1);//string object and remove the last comma ','
deferred.resolve(stringObject);
},
function retrieveListItemFail(sender, args) {
alert("error in inner request: " + args.get_message());
}
);
}
这是字符串对象的值 '{"id":"1","name":"Nang Thang Hai","university":"Hutech University","gender":"true"},{"id":"2","name":"Gio Thang Chin","university":"Foreign Trade University","gender":"false"}'
var myApp = angular.module('myApp', []);
myApp.controller("myController", function ($scope) {
deferred.done(function (value) {
alert(value);//passing sucess here
json = $.parseJSON('[' + value + ']');//convert string object to json data
alert("Name:"+json[0].name);//Nang Thang Hai
});
$scope.students = json;//why there is nothing here ?
});
如果我在 deferred.done 方法中移动控制器。它不起作用,因为它在 Jquery 中。我知道方法 context.executeQueryAsync() 是异步的,所以我认为我们必须先推迟它,然后再执行 angularjs。
var myApp = angular.module('myApp', []);
deferred.done(function (value) {
myApp.controller("myController", function ($scope) {//Error angularjs can't put inside jquery...
var json = $.parseJSON('[' + value + ']');//convert string to json data
$scope.students = json;
});
});
<table id="tbStudent" data-ng-app="myApp" data-ng-controller="myController">
<tbody>
<tr>
<th>ID</th>
<th>Name</th>
<th>School</th>
<th>Gender</th>
</tr>
<tr data-ng-repeat="student in students">
<td>{{student.id}}</td>
<td>{{student.name}}</td>
<td>{{student.school}}</td>
<td>{{student.gender}}</td>
</tr>
</tbody>
</table>
感谢您的帮助。你们的 cmets 正在帮助我发展我的职业生涯 :)
【问题讨论】:
标签: jquery angularjs asynchronous sharepoint-2013