AngularJS等待unitl变量已更改

时间:2015-07-09 12:22:41

标签: javascript angularjs sharepoint

(我改变标题以更准确地解决当前问题)

我正在尝试将人员添加到客户端peoplepicker的分配中,问题是为了添加它们,我需要该人的id,而我不知道如何在$ scope中获取此ID宾语。

这是获取信息和个人身份的代码:

function getUserInfo() {

// Get the people picker object from the page.
var peoplePicker = this.SPClientPeoplePicker.SPClientPeoplePickerDict.peoplePickerDiv_TopSpan;

// Get information about all users.
var users = peoplePicker.GetAllUserInfo();
var userInfo = '';
for (var i = 0; i < users.length; i++) {
    var user = users[i];
    for (var userProperty in user) { 
        userInfo += userProperty + ':  ' + user[userProperty] + '<br>';
    }
}
$('#resolvedUsers').html(userInfo);

// Get user keys.
var keys = peoplePicker.GetAllUserKeys();
$('#userKeys').html(keys);

// Get the first user's ID by using the login name.
getUserId(users[0].Key);
}

// Get the user ID.
function getUserId(loginName) {
var context = new SP.ClientContext.get_current();
this.user = context.get_web().ensureUser(loginName);
context.load(this.user);
context.executeQueryAsync(
     Function.createDelegate(null, ensureUserSuccess), 
     Function.createDelegate(null, onFail)
);
}

function ensureUserSuccess() {
$('#userId').html(this.user.get_id());
}

function onFail(sender, args) {
alert('Query failed. Error: ' + args.get_message());
}

我的问题是我不知道'getUserId'函数内部发生了什么,我怎么能用这个函数来获取$ scope对象里面一个人的id,这样我以后就可以发送它了有关SharePoint列表的其他信息?

这是来自https://msdn.microsoft.com/en-us/library/office/jj713593.aspx

的示例

我研究过使用服务,我遇到了同样的问题,区别在于,现在我知道问题是什么。但是,假设我不使用服务,如果我只使用变量,那么我就像这样启动变量:

var userId;

然后在'ensureUserSuccess()'函数内部执行:

userId = this.user.get_id();

最后,在我的$ onSave函数中,我将$ scope.user.id设置为userId变量。 (onSave函数用于将此项目保存到SharePoint列表)

这是我第二次尝试保存项目时,第一次执行此操作时,userId变量未定义,但如果我尝试再次保存它,则不是。在我的onSave函数中,我有这个:

getUserInfo();
$scope.user.id = userId;

在我的脑海中,我喜欢在将$ scope.user.id设置为userId变量之前完成'getUserInfo'功能,但现在我坚信这就是问题所在,我该怎么办?设置user.id直到该功能完成?

0 个答案:

没有答案