在 AngularJS 应用程序($scope 问题???)中加载页面时执行 SharePoint 函数
Execute SharePoint Function On Page Load in AngularJS Application ($scope issue???)
我在 AngularJS 应用程序中使用 SharePoint 的 JavaScript 对象模型,需要其功能之一在页面加载时执行,以便 ng-repeat 填充和使用数组。
目前,它在页面加载时将数组推送记录到控制台,但似乎不会将值提交到数组中以供在页面/$scope 上使用,直到我从输入中单击 in/then框,单击警告框上的“确定”,或单击让我留在页面上的虚拟 link。这就是我很困惑的地方,为什么它可以在加载时正确记录数组,但没有在 $scope 中为页面准备好数组。
我尝试了以下方法,但没有成功:
1) 我已将执行函数的调用移至控制器底部
2) 我试过了 angular.element(document).ready
3) 我试过将它包装在一个函数中,例如:
$scope.initTaxonomy = function () {
$(function () {
// Function here
});
};
我不明白的是,为什么调用 REST 服务的以下代码通过推入 $scope 以在 ng-repeat 中使用而在页面 load/works 上完美执行,而我的函数却没有时间:
// Array holding items for display on homepage
$scope.items = [];
appItems.query(function (result) {
// Data is within an object of "value", so this pushes the server side array into the $scope array
var result = result.value;
var userInfo;
// Foreach result, push data into items array
angular.forEach(result, function (resultvalue, resultkey) {
$scope.items.push({
title: resultvalue.Title,
status: resultvalue.Status
});
});
});
此函数将在页面加载时成功登录到控制台,但在我点击页面之前不会在我的 ng-repeat 中填充数组:
var termsArray = [];
$scope.termsArray = termsArray;
execOperation();
function execOperation() {
//Current Context
var context = SP.ClientContext.get_current();
//Current Taxonomy Session
var taxSession = SP.Taxonomy.TaxonomySession.getTaxonomySession(context);
//Term Stores
var termStores = taxSession.get_termStores();
//Name of the Term Store from which to get the Terms.
var termStore = termStores.getByName("Taxonomy_1111");
//GUID of Term Set from which to get the Terms.
var termSet = termStore.getTermSet("1111111");
var terms = termSet.getAllTerms();
context.load(terms);
context.executeQueryAsync(function () {
var termEnumerator = terms.getEnumerator();
while (termEnumerator.moveNext()) {
var currentTerm = termEnumerator.get_current();
var guid = currentTerm.get_id();
var guidString = guid.toString();
termsArray.push({
termName: currentTerm.get_name(),
termGUID: guidString,
});
//getLabels(guid);
}
console.log($scope.termsArray)
}, function (sender, args) {
console.log(args.get_message());
});
};
我的控制器通过app.js加载页面如下:
$routeProvider.
when('/', { templateUrl: '/views/home.html', controller: 'appHomeItemsCtrl' }).
when('/add-item', { templateUrl: '/views/add-item.html', controller: 'appItemPostCtrl' }).
otherwise({ redirectTo: '/' });
这是 SharePoint 的 JSOM 需要正确执行某些内容的问题,我是如何尝试在 AngularJS 中执行的,还是其他问题?
我能够让它工作。问题是 Angular 似乎不尊重非 Angular 函数,因此在将我的数组推送到 $scope 周围使用 $scope.apply 是有效的。请注意,包装整个函数会导致 Angular:
的摘要出现问题
var termsArray = [];
execOperation();
function execOperation() {
//Current Context
var context = SP.ClientContext.get_current();
//Current Taxonomy Session
var taxSession = SP.Taxonomy.TaxonomySession.getTaxonomySession(context);
//Term Stores
var termStores = taxSession.get_termStores();
//Name of the Term Store from which to get the Terms.
var termStore = termStores.getByName("Taxonomy_1111");
//GUID of Term Set from which to get the Terms.
var termSet = termStore.getTermSet("1111");
var terms = termSet.getAllTerms();
context.load(terms);
context.executeQueryAsync(function () {
var termEnumerator = terms.getEnumerator();
while (termEnumerator.moveNext()) {
var currentTerm = termEnumerator.get_current();
var guid = currentTerm.get_id();
var guidString = guid.toString();
termsArray.push({
termName: currentTerm.get_name(),
termGUID: guidString,
});
}
console.log(termsArray)
$scope.$apply(function () {
$scope.termsArray = termsArray;
});
}, function (sender, args) {
console.log(args.get_message());
});
};
我在 AngularJS 应用程序中使用 SharePoint 的 JavaScript 对象模型,需要其功能之一在页面加载时执行,以便 ng-repeat 填充和使用数组。
目前,它在页面加载时将数组推送记录到控制台,但似乎不会将值提交到数组中以供在页面/$scope 上使用,直到我从输入中单击 in/then框,单击警告框上的“确定”,或单击让我留在页面上的虚拟 link。这就是我很困惑的地方,为什么它可以在加载时正确记录数组,但没有在 $scope 中为页面准备好数组。
我尝试了以下方法,但没有成功:
1) 我已将执行函数的调用移至控制器底部
2) 我试过了 angular.element(document).ready
3) 我试过将它包装在一个函数中,例如:
$scope.initTaxonomy = function () {
$(function () {
// Function here
});
};
我不明白的是,为什么调用 REST 服务的以下代码通过推入 $scope 以在 ng-repeat 中使用而在页面 load/works 上完美执行,而我的函数却没有时间:
// Array holding items for display on homepage
$scope.items = [];
appItems.query(function (result) {
// Data is within an object of "value", so this pushes the server side array into the $scope array
var result = result.value;
var userInfo;
// Foreach result, push data into items array
angular.forEach(result, function (resultvalue, resultkey) {
$scope.items.push({
title: resultvalue.Title,
status: resultvalue.Status
});
});
});
此函数将在页面加载时成功登录到控制台,但在我点击页面之前不会在我的 ng-repeat 中填充数组:
var termsArray = [];
$scope.termsArray = termsArray;
execOperation();
function execOperation() {
//Current Context
var context = SP.ClientContext.get_current();
//Current Taxonomy Session
var taxSession = SP.Taxonomy.TaxonomySession.getTaxonomySession(context);
//Term Stores
var termStores = taxSession.get_termStores();
//Name of the Term Store from which to get the Terms.
var termStore = termStores.getByName("Taxonomy_1111");
//GUID of Term Set from which to get the Terms.
var termSet = termStore.getTermSet("1111111");
var terms = termSet.getAllTerms();
context.load(terms);
context.executeQueryAsync(function () {
var termEnumerator = terms.getEnumerator();
while (termEnumerator.moveNext()) {
var currentTerm = termEnumerator.get_current();
var guid = currentTerm.get_id();
var guidString = guid.toString();
termsArray.push({
termName: currentTerm.get_name(),
termGUID: guidString,
});
//getLabels(guid);
}
console.log($scope.termsArray)
}, function (sender, args) {
console.log(args.get_message());
});
};
我的控制器通过app.js加载页面如下:
$routeProvider.
when('/', { templateUrl: '/views/home.html', controller: 'appHomeItemsCtrl' }).
when('/add-item', { templateUrl: '/views/add-item.html', controller: 'appItemPostCtrl' }).
otherwise({ redirectTo: '/' });
这是 SharePoint 的 JSOM 需要正确执行某些内容的问题,我是如何尝试在 AngularJS 中执行的,还是其他问题?
我能够让它工作。问题是 Angular 似乎不尊重非 Angular 函数,因此在将我的数组推送到 $scope 周围使用 $scope.apply 是有效的。请注意,包装整个函数会导致 Angular:
的摘要出现问题 var termsArray = [];
execOperation();
function execOperation() {
//Current Context
var context = SP.ClientContext.get_current();
//Current Taxonomy Session
var taxSession = SP.Taxonomy.TaxonomySession.getTaxonomySession(context);
//Term Stores
var termStores = taxSession.get_termStores();
//Name of the Term Store from which to get the Terms.
var termStore = termStores.getByName("Taxonomy_1111");
//GUID of Term Set from which to get the Terms.
var termSet = termStore.getTermSet("1111");
var terms = termSet.getAllTerms();
context.load(terms);
context.executeQueryAsync(function () {
var termEnumerator = terms.getEnumerator();
while (termEnumerator.moveNext()) {
var currentTerm = termEnumerator.get_current();
var guid = currentTerm.get_id();
var guidString = guid.toString();
termsArray.push({
termName: currentTerm.get_name(),
termGUID: guidString,
});
}
console.log(termsArray)
$scope.$apply(function () {
$scope.termsArray = termsArray;
});
}, function (sender, args) {
console.log(args.get_message());
});
};