0

我最近将我的应用程序从 angularjs 1.5.9 更新到了 angularjs 1.7.9。在我的一个控制器中,我有以下代码:

angular.module( 'myModule' )
.component( 'dynamicContent', {
    bindings: {
        pageTitle: '<',
        content: '<',
        type: '<',
        width: '<'
    },
    templateUrl: 'path/to/html/file',
    controllerAs: 'dynamic',
    controller: function( $state, $window, Contentful ) {
        var vm = this;

        vm.$onInit = _init();

        function _init() {
            vm.items = _.map( vm.content, mapContent );
        }

更新到 1.7.9 后,vm.items 变量从未被定义,因为 _init 函数中未定义 vm.content。但是,将代码更改为...

 angular.module( 'myModule' )
.component( 'dynamicContent', {
    bindings: {
        pageTitle: '<',
        content: '<',
        type: '<',
        width: '<'
    },
    templateUrl: 'path/to/html/file',
    controllerAs: 'dynamic',
    controller: function( $state, $window, Contentful ) {
        var vm = this;

        vm.$onInit = function _init() {
            vm.items = _.map( vm.content, mapContent );
        }

这现在有效。谁能解释为什么定义我将其设置为 $onInit 的函数会使这项工作有效?谢谢!

4

1 回答 1

1
vm.$onInit = _init();

这等于简单_init();,你大概的意思vm.$onInit = _init

在 1.5 中,您可以自己运行 init 并没有真正的区别,但在最新的 Angularjs 绑定中,设置在控制器主函数之后,但在 init 之前,例如:

bindings: { test: '<'}
controller: () => {
  var vm = this;
  console.log(vm.test); // undefined
  vm.$onInit = () => {
    console.log(vm.test); // has value
  }
}
于 2020-02-10T17:47:38.123 回答