Javascript 选择更改角度执行?
angularjs有一个名为onchanges的内置指令,该指令将侦听select或其他内容中的更改,并允许您在更改后执行函数 我多么希望这是一个角度。目前,我对ngmodel有了更好的理解,并看到了如何利用一个主题来实现以下目标 我选择了一些城市:Javascript 选择更改角度执行?,javascript,angular,angular-ngmodel,subject,subject-observer,Javascript,Angular,Angular Ngmodel,Subject,Subject Observer,angularjs有一个名为onchanges的内置指令,该指令将侦听select或其他内容中的更改,并允许您在更改后执行函数 我多么希望这是一个角度。目前,我对ngmodel有了更好的理解,并看到了如何利用一个主题来实现以下目标 我选择了一些城市: <div id="venueFilterParams" ngModelGroup="venueFilterParams"> <!-- need to add default values from url--&
<div id="venueFilterParams" ngModelGroup="venueFilterParams">
<!-- need to add default values from url-->
<select [ngModel]="citySelect"
name="citySelect"
id="citySelect"
class="form-control">
<option *ngFor="let city of cities" value="{{city}}">{{city}}</option> <!--come back and wire up-->
</select>
以及一些精选的社区:
<select [ngModel]="neighborhoodSelected"
name="neighborhood"
id="neighborhood"
class="form-control">
<option *ngFor="let neighborhood of neighborhoodlist" value="{{neighborhood}}">{{neighborhood}}</option>
</select>
如果用户选择的城市不是指向此页面的URL中传递的城市,这将是默认选择的城市,我还没有构建该城市
我需要我的应用程序访问我的数据库,并用该城市的邻里关系重新填充邻里选择选项
所有这些我都能做得很好,我想弄明白的是代码,它将侦听城市选择并运行一个函数,该函数执行上述操作
现在[ngModel]=citySelect;不会自行更新,我必须等待提交单击以捕获值,但[ngModel]=citySelect和侦听主题中的citySelect变量如何
我会继续努力,但你的建议真的很感激 您可以使用ngModelChange:
请注意,ngModelChange必须在html元素的ngModel之后列出,否则它将不会注册。在Angular v2+中,您可以直接绑定到javascript DOM事件。对于“选择”,每当值更改时触发事件更改。因此,您可以像这样设置和响应事件: private onCityChange:无效{ /*您的自定义代码*/ }
Angular具有类似的指令,称为change或ngModelChange 如果要基于url设置城市的初始值,则需要双向数据绑定。对于双向数据绑定,ngModelChange是一个不错的选择 因此,在您所在的城市选择:
<select [ngModel]="citySelect"
(ngModelChange)="onCityChange($event)"
name="citySelect"
id="citySelect"
class="form-control">
<option *ngFor="let city of cities" [value]="{{city}}">{{city}}
</option> <!--come back and wire up-->
</select>
查看反应式表单,它们会为您提供特定组件或整个表单的所有事件的RxJS流。谢谢@jornsharpe有没有一种方法可以在没有反应式表单的情况下做到这一点?如果不是的话,我会记下来的。我以为ngModelChange是为angularjs设计的,在Angular4中不再使用了?至少我想我读到了,我在Angular2中使用了它。☺
private myCitySpecificFunction(): void {
console.log('City updated to ' + this.citySelect);
}
<select [ngModel]="citySelect"
(ngModelChange)="onCityChange($event)"
name="citySelect"
id="citySelect"
class="form-control">
<option *ngFor="let city of cities" [value]="{{city}}">{{city}}
</option> <!--come back and wire up-->
</select>
public onCityChange(chosenCity) {
console.log(chosenCity);
// populate neighborhoodlist based on chosenCity
}