AngularJS 等到变量改变
AngularJS wait unitl variable has changed
(我更改了标题以更准确地描述当前问题)
我正在尝试通过客户端人员选择器将人员添加到分配中,问题是为了添加他们,我需要人员的 ID,但我不知道如何在$范围 object。
这是获取信息的代码,以及一个人的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 object 中的人的 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;
在我的脑海中,我喜欢相信 'getUserInfo' 函数在将 $scope.user.id 设置为 userId 变量之前完成,但现在我坚信这就是问题所在,如何等待设置 user.id 直到该功能完成?
好的,所以我最初的问题是关于如何能够将用户的 ID 从 peoplepicker 设置为 $scope 对象。
我发现函数'initializePeoplePicker'有一个回调函数:
schema['OnUserResolvedClientScript'] = function(){
getUserInfo();
};
这样做解决了我的问题,每次解析用户时都会触发此函数,然后我将用户 ID 设置为变量,然后在保存之前将其设置为 $scope 对象。
(我更改了标题以更准确地描述当前问题)
我正在尝试通过客户端人员选择器将人员添加到分配中,问题是为了添加他们,我需要人员的 ID,但我不知道如何在$范围 object。
这是获取信息的代码,以及一个人的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 object 中的人的 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;
在我的脑海中,我喜欢相信 'getUserInfo' 函数在将 $scope.user.id 设置为 userId 变量之前完成,但现在我坚信这就是问题所在,如何等待设置 user.id 直到该功能完成?
好的,所以我最初的问题是关于如何能够将用户的 ID 从 peoplepicker 设置为 $scope 对象。
我发现函数'initializePeoplePicker'有一个回调函数:
schema['OnUserResolvedClientScript'] = function(){
getUserInfo();
};
这样做解决了我的问题,每次解析用户时都会触发此函数,然后我将用户 ID 设置为变量,然后在保存之前将其设置为 $scope 对象。