组件$ onInit()无法在控制器中看到变量 - angularjs 1.6.x.

时间:2017-03-14 17:39:43

标签: javascript angularjs components

我在1.6.x中编写angularjs应用程序...而且我遇到了component()的问题,其中$ onInit()看不到任何var定义...

每个var都是未定义的

这是我的代码..

"close"

提前谢谢你......

3 个答案:

答案 0 :(得分:2)

当你输入$ onInit函数(){}时,现在引用$ onInit,因此它成为允许传入控制器的变量的问题。

我知道很多人根据你在控制器第一行学到的东西声明vm或ctrl。

var ctrl = this;
ctrl.service = carFactory;

ctrl.$onInit = function() {
    console.log(ctrl.service);
}

答案 1 :(得分:0)

使用Angular 1.6时,将忽略在控制器中的方法外定义的变量。您还应该在控制器中的对象this上定义所有方法。

angular.module('carFilter', []).
    component('carFilter', {
        controller: function (carFactory, $http) {
            this.$onInit = function () {
                this.service = carFactory; 
                this.updatedObj = {};
                this.testing = 'a';
                console.log(this.service);

                this.loadFilter().then(function (result) {
                    this.updateFilter(result)
                }.bind(this);
            };

            this.loadFilter = function() {
               //$http here to return promise 
            };

            this.updateFilter = function (responseData) {            
                this.updatedObj = responseData;
            };
        },
        templateUrl: 'someURL'
   });

答案 2 :(得分:0)

在函数this中引用任何一个对象调用该函数,这不一定是你的组件。

要确保this中的$onInit对象引用您的组件,您可以将其明确绑定到组件this

this.$onInit = function () {
    ...
};
this.$onInit.bind(this);

或将变量设置到您的组件this并使用闭包在$onInit中访问它:

var vm = this;

this.$onInit = function () {
    vm.testing = 'a';
    console.log(vm.service); //th

    loadFilter().then(function (result) {
        updateFilter(result)
    });
};

updateFilter功能也是如此。