AngularJS 组件:在控制器中使用绑定对象
AngularJS component: using binding object in controller
我使用 Angular 组件(第一个示例来自 this)。当我在组件中绑定对象时,它可以在模板中访问,但不能在控制器中访问。
js:
function HeroDetailController() {
console.log("Here I want to use hero.name: ");
console.log(hero.name); // I want to use binding object in controller, but doesn't work
}
angular.module('heroApp').component('heroDetail', {
templateUrl: 'heroDetail.html',
controller: HeroDetailController,
controllerAs: 'ctrl',
bindings: {
hero: '='
}
});
html:
<hero-detail hero="ctrl.hero"></hero-detail>
模板html(这里有效):
<span>Name: {{ctrl.hero.name}}</span>
错误:
ReferenceError: hero is not defined
您将在 HeroDetailController
上下文中获得 bindings
值,即 this
function HeroDetailController() {
var ctrl = this;
console.log("Here I want to use hero.name: ");
console.log(ctrl.hero);
}
虽然以上行不通。因为它不会在第一个摘要周期将初始绑定传递给组件。
要获取价值,您可以在组件上使用 $onInit
生命周期价值。
function HeroDetailController() {
var ctrl = this;
console.log("Here I want to use hero.name: ");
ctrl.$onInit = function(){
console.log(ctrl.hero);
}
}
即使没有$onInit
也可以直接获取值。同样,您必须像下面这样更改 $compileProvider
配置。(它已在 1.6+ 中引入)
.config(function($compileProvider){
$compileProvider.preAssignBindingsEnabled(true)
});
注意:理想情况下,您不应该在您的应用程序中强制执行上述设置,我只是为了演示。
我使用 Angular 组件(第一个示例来自 this)。当我在组件中绑定对象时,它可以在模板中访问,但不能在控制器中访问。
js:
function HeroDetailController() {
console.log("Here I want to use hero.name: ");
console.log(hero.name); // I want to use binding object in controller, but doesn't work
}
angular.module('heroApp').component('heroDetail', {
templateUrl: 'heroDetail.html',
controller: HeroDetailController,
controllerAs: 'ctrl',
bindings: {
hero: '='
}
});
html:
<hero-detail hero="ctrl.hero"></hero-detail>
模板html(这里有效):
<span>Name: {{ctrl.hero.name}}</span>
错误:
ReferenceError: hero is not defined
您将在 HeroDetailController
上下文中获得 bindings
值,即 this
function HeroDetailController() {
var ctrl = this;
console.log("Here I want to use hero.name: ");
console.log(ctrl.hero);
}
虽然以上行不通。因为它不会在第一个摘要周期将初始绑定传递给组件。
要获取价值,您可以在组件上使用 $onInit
生命周期价值。
function HeroDetailController() {
var ctrl = this;
console.log("Here I want to use hero.name: ");
ctrl.$onInit = function(){
console.log(ctrl.hero);
}
}
即使没有$onInit
也可以直接获取值。同样,您必须像下面这样更改 $compileProvider
配置。(它已在 1.6+ 中引入)
.config(function($compileProvider){
$compileProvider.preAssignBindingsEnabled(true)
});
注意:理想情况下,您不应该在您的应用程序中强制执行上述设置,我只是为了演示。