为什么我的 angular1.6 控制器在有断点时不能正确绑定
Why does my angular1.6 controller not bind correctly when I have a break point
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();
}
};
}
]);
当我 运行 代码 没有 断点时,我得到了这个
绑定 optionsData
、optionsSelected
和 allSubtypesSelected` 按预期工作。但出于某种原因 当我在代码中放置一个断点时 (在上面的代码中指定)我得到以下
我什么都没变!我的代码不工作,因为当我调试我的代码时 $ctrl.optionsData 是未定义的,但我不确定为什么。
您可以使用 AngularJS 的 $onInit()
而不是从您的控制器函数调用 init。
在 Angular 有机会设置传入的变量/绑定之前调用 init() 函数。init 函数中的任何断点都将在控制器完全初始化之前发生。
来自 AngularJS 文档:
$onInit()
- 在构造元素上的所有控制器并初始化它们的绑定之后调用每个控制器(并且在该元素上的指令的 pre & post 链接函数之前) .这是放置控制器初始化代码的好地方。
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();
}
};
}
]);
当我 运行 代码 没有 断点时,我得到了这个
绑定 optionsData
、optionsSelected
和 allSubtypesSelected` 按预期工作。但出于某种原因 当我在代码中放置一个断点时 (在上面的代码中指定)我得到以下
我什么都没变!我的代码不工作,因为当我调试我的代码时 $ctrl.optionsData 是未定义的,但我不确定为什么。
您可以使用 AngularJS 的 $onInit()
而不是从您的控制器函数调用 init。
在 Angular 有机会设置传入的变量/绑定之前调用 init() 函数。init 函数中的任何断点都将在控制器完全初始化之前发生。
来自 AngularJS 文档:
$onInit()
- 在构造元素上的所有控制器并初始化它们的绑定之后调用每个控制器(并且在该元素上的指令的 pre & post 链接函数之前) .这是放置控制器初始化代码的好地方。