2
HB.Core.Directives.directive('hbMultiselect', [
    function() {
        return {
            restrict: 'E',
            templateUrl: '/hb-core/library/directives/hb-multiselect/hb-multiselect-ptl.html',
            scope: {},
            controllerAs: '$ctrl',
            bindToController: {
                optionsData: '<',
                optionsSelected: '=',
                allSubtypesSelected: '='
            },
            controller: function() {
                var $ctrl = this;

                // $ctrl.$onInit = function() {
                //     console.log(this); // Tried this... didn't work either
                // };

                function init() {
                    $ctrl.isExpanded = false;
                    $ctrl.optionsDisplay = [];
                    $ctrl.tags = [];
                    console.log("------")
                    console.log($ctrl);
                    console.log("------")     
>>>>>>>>>>>>>>>>>>>>**BREAK POINT HERE**                   
                }
                init();
            }
        };
    }
]);

当我在没有断点的情况下运行代码时,我得到了这个 在此处输入图像描述

bindingsoptionsDataoptionsSelectedallSubtypesSelected 正在按预期工作。但是由于某种原因,当我在代码中放置断点(在上面的代码中指定)时,我得到以下

在此处输入图像描述

我什么都没改变!我的代码不起作用,因为当我调试代码时 $ctrl.optionsData 未定义,但我不知道为什么。

4

1 回答 1

1

您可以使用 AngularJS$onInit()而不是从控制器函数调用 init。

在 Angular 有机会设置传入的变量/绑定之前调用 init() 函数。 init 函数中的任何断点都将在控制器完全初始化之前发生。

从 AngularJS 文档:

$onInit()- 在元素上的所有控制器都已构建并初始化其绑定之后(以及在此元素上的指令的前后链接函数之前)在每个控制器上调用。这是放置控制器初始化代码的好地方。

于 2017-09-21T03:32:00.497 回答