代码之家  ›  专栏  ›  技术社区  ›  FullStackDeveloper

为什么即使我在控制器中为这个数组赋值,我的数组仍然是空的?(我使用的是angularjs,而不是angularjs)

  •  1
  • FullStackDeveloper  · 技术社区  · 7 年前

    这个问题花了我一天的时间来调试,但还是不走运。

    问题: this.gridOptions.data = this.allTemplatesFromClassificationRepo ; this.allTemplatesFromClassificationRepo = templateReorderProperties;

    P、 虽然我无法获得 allTemplatesFromClassificationRepo 在控制器中,但我可以在html中获得它的值。

    namespace app.admin {
    'use strict';
    
    class FooController {
        static $inject: Array<string> = [];
    
        constructor() {
            this.activate();
        }
    
        activate() {
            this.getData();
    
            this.classificationFoo = this.data[0];
    
            this.getTemplateFromGivenRepo(this.classificationFoo.id, this.classificationFoo.displayName);
    
            this.populateData();
        }
    
        data: any;
    
        classificationFoo: any;
    
        allDataFromclassificationFoo: any = [];
    
        // demo grid
        gridOptions = {
            enableFiltering: true,
            },
            data: []
        };
    
        populateData() {
                this.gridOptions.data = this.allTemplatesFromClassificationRepo ;
        }
    
        getData() {
            this.fooService.getUserData();
            this.data = this.fooService.userdata;
        }
    
        getTemplateFromGivenRepo(fooId: string, fooName: string) {
            switch (fooId) {
                case 'FOO':
                    this.TemplateApi.templatesAvaiableForRepoIdGET(fooId).then(data => {
                        data.forEach(element => {
                           element.fooName = fooName;
                        });
    
                        let templateReorderProperties = data
    
                        this.allTemplatesFromClassificationRepo = templateReorderProperties;
                    }, error => {
    
                    });
                    break;
    
                default:
                    break;
            }
        };
    }
    
    class Bar implements ng.IDirective {
        static $inject: Array<string> = [];
    
        constructor() {
        }
    
        bindToController: boolean = true;
        controller = FooController;
        controllerAs: string = 'vm';
        templateUrl: string = 'app/foo.html';
    
        static instance(): ng.IDirective {
            return new Bar();
        }
    }
    
    angular
        .module('app.admin')
        .directive('bar', Bar.instance);
    

    2 回复  |  直到 7 年前
        1
  •  2
  •   RIYAJ KHAN    7 年前

    getTemplateFromGivenRepo 是异步操作。

    this.populateGridData(); 呼叫内部 getTemplateFromGivenRepo

    this.allTemplatesFromClassificationRepo = templateReorderProperties;

    getTemplateFromGivenRepo(repoId: string, repoName: string) {
                switch (repoId) {
                    case 'CLASSIFICATION':
                        this.TemplateApi.templatesAvaiableForRepoIdGET(repoId).then(data => {
    
                            this.allTemplatesFromClassificationRepo = templateReorderProperties;
                            this.populateGridData(); // call here
                        }, error => {
    
                        });
                }
            };
    

    并且在 then 能够的 success 这populateGridData();

        2
  •  0
  •   Maxim Shoustin    7 年前

    我认为问题出在 this

    试着在开头写下如下内容:

    var self = this;
    

    self 钥匙

    a、 e.:

    self.gridOptions.data = self.allTemplatesFromClassificationRepo;
    
    // and so on ...
    

    通过这种方式,您将保证使用相同的范围实例


    希望它能起作用