AngularJS数组未加载视图加载,但警报/控制台工作

时间:2015-05-19 15:02:36

标签: javascript arrays angularjs

我正在尝试将值推送到数组中,如下所示,但它显示为空数组。警报工作。我相信我错过了一些明显的东西。有线索吗?我已经将代码包含在数组推送尝试和另一个具有工作警报的代码条目中。

    $scope.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_111111111111");
        //GUID of Term Set from which to get the Terms.
        var termSet = termStore.getTermSet("12345-55-689");
        var terms = termSet.getAllTerms();
        context.load(terms);
        context.executeQueryAsync(function () {
            var termEnumerator = terms.getEnumerator();
            while (termEnumerator.moveNext()) {
                var currentTerm = termEnumerator.get_current();
                $scope.termsArray.push({
                                termName: currentTerm.get_name(),
                                termGUID: currentTerm.get_id(),
                                termSynonyms: 'Coming Soon'
                            });
            }

        }, function (sender, args) {
            console.log(args.get_message());
        });
    }

以下是包含工作提醒的代码:

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_111111111111");
        //GUID of Term Set from which to get the Terms.
        var termSet = termStore.getTermSet("12345-55-689");
        var terms = termSet.getAllTerms();
        context.load(terms);
        context.executeQueryAsync(function () {
            var termEnumerator = terms.getEnumerator();
            var termList = "Terms: \n";
            while (termEnumerator.moveNext()) {
                var currentTerm = termEnumerator.get_current();
                $scope.termsArray.push({
                    termName: currentTerm.get_name(),
                    termGUID: currentTerm.get_id(),
                    termSynonyms: 'Coming Soon'
                });

                termList += currentTerm.get_id() + currentTerm.get_name() + "\n";
            }
            alert(termList);
        }, function (sender, args) {
            console.log(args.get_message());
        });
    }

这是HTML输出:

<div> {{termsArray}}</div>

返回[]

更新:如果我在输入框中单击并退出,或单击警报并点击确定,则会加载数组而不是在页面加载时加载。

1 个答案:

答案 0 :(得分:0)

我能够追踪问题。看来Angular并不尊重加载时的非Angular函数,所以我需要将$ scoped数组包装在$ scope.apply中。有关详细信息,请参阅此处:Execute SharePoint Function On Page Load in AngularJS Application ($scope issue???)