Только что прошел через Tour of Heroes tutorial app и испытал некоторое интересное поведение в моем шаблоне. Я начал вторую часть учебника с помощью следующего кода:Angular 2 weird template scope поведение
class Hero {
id: number;
name: string;
}
@Component({
selector: 'my-app',
template:`
<h1>{{title}}</h1>
<h2>{{hero.name}} details!</h2>
<div><label>id: </label>{{hero.id}}</div>
<div>
<label>name: </label>
<div><input [(ng-model)]="hero.name" placeholder="name"></div>
</div>
`,
directives: [FORM_DIRECTIVES]
})
class AppComponent {
public title = 'Tour of Heroes';
public hero: Hero = {
id: 1,
name: 'Windstorm'
};
}
Когда проинструктированы, чтобы добавить множество новых героев (var HEROES: Hero[] = [ /* Hero Data */];
) и новое свойство моего компонента, я предположил, что мы заменяли оригинальный hero
собственности и в конечном итоге с этим:
class AppComponent {
public title = 'Tour of Heroes';
public heroes = HEROES;
}
Затем шаблон был изменен следующим образом:
<h1>{{title}}</h1>
<ul class="heroes">
<li *ng-for="#hero of heroes">
<span class="badge">{{hero.id}}</span> {{hero.name}}
</li>
</ul>
<h2>{{hero.name}} details!</h2>
<div><label>id: </label>{{hero.id}}</div>
<div>
<label>name: </label>
<div><input [(ng-model)]="hero.name" placeholder="name"></div>
</div>
В браузере, т он неупорядоченный список затем отобрал один li
за hero
в массиве, но не распечатал name
или id
. Псих. После некоторого мастерства я понял, что если я добавлю исходное свойство hero
обратно в класс AppComponent
, все герои в массиве будут отображаться просто отлично. Кроме того, если я просто удалил любой код шаблона, ссылающийся на hero
свойство не в цикле ng-for
, список также будет отображаться просто отлично.
Вот что я ожидал:
В моей оригинальной версии, все герои в массиве должны быть отражены в неупорядоченном списке, но затем все значения героя вне цикла должен быть undefined или, возможно, последний элемент в списке.
Когда я добавил свойство оригинального героя, должно возникнуть какое-то название столкновения или какой-либо другой побочный эффект.
Как это работает так, как оно делает?
Edit: Вот запрашиваемая plunker: http://plnkr.co/edit/U3bSCaIOOjFdtw9XxvdR?p=preview
Можете ли вы добавить плункер вашего точного кода. Я не мог воспроизвести вашу проблему. – cjds
Я добавил плункер. Просто переключите комментарий к свойству hero, чтобы увидеть результаты. – CuddleBunny