Angular 2 внешних входа
Пожалуйста, помогите? Только начиная с Angular 2 и имея следующую проблему.
Мой компонент ниже:
@Component({
selector: 'myapp',
inputs: ['mynumber']
})
@View({
template: `<p>The next number is {{ mynumber + 1 }}</p>'
})
export class App {
mynumber: number;
}
bootstrap(App);
Внутри моего HTML:
<myapp [mynumber]='41'></myapp>
Но при запуске я получаю следующее:
Следующее число NaN
Это выглядит просто, но я чего-то не хватает. То, что я пытаюсь достичь, - это передать значение извне приложения в него.
Спасибо.
Ответы
Ответ 1
Вы не можете указать привязки свойств (входы) для корневого компонента вашего приложения. Если вы действительно хотите указать некоторые привязки для него, вы должны использовать дополнительный компонент. См. этот plunkers.
import {Component, Input} from 'angular2/angular2'
@Component({
selector: 'myapp',
template: `
<p>The next number is {{ mynumber + 1 }}</p>
`
})
class App {
@Input() mynumber: number;
}
@Component({
selector: 'root',
directives: [App],
template: `
<myapp [mynumber]="41"></myapp>
`
})
export class Root {}
Ответ 2
Обходной путь - это прямое чтение с помощью ElementRef
:
constructor(elementRef:ElementRef) {
console.log(elementRef.nativeElement.getAttribute('someattribute');
}
и используйте его как
<myapp mynumber='41'></myapp>
См. также https://github.com/angular/angular/issues/1858
Ответ 3
Обновите ответы, используя ElementRef: вместо этого используйте Renderer.selectRootElement.
Любой, кто пытается использовать ElementRef.nativeElement, вероятно, видит различные предупреждения о том, как это последнее средство и т.д. Вот модифицированная, более безопасная версия.
constructor( renderer: Renderer ){
let rootElement = renderer.selectRootElement('app-root');
this.whateverInput = rootElement.getAttribute('my-attribute');
}
Ответ 4
Для тех, кто использует angular 4:
Если вы решили использовать его как атрибут, подобный этому
<myapp mynumber='41'></myapp>
Вы можете просто использовать аннотацию @Attribute следующим образом:
class Component {
constructor(@Attribute('attributeName') public param:String){
/** some process with your injected param **/
}
}
Протестировано и успешно работает в моем приложении.
Найден там путь: https://gillespie59.github.io/2015/10/08/angular2-attribute-decorator.html