Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/angular/31.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 选择更改角度执行?_Javascript_Angular_Angular Ngmodel_Subject_Subject Observer - Fatal编程技术网

Javascript 选择更改角度执行?

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--&

angularjs有一个名为onchanges的内置指令,该指令将侦听select或其他内容中的更改,并允许您在更改后执行函数

我多么希望这是一个角度。目前,我对ngmodel有了更好的理解,并看到了如何利用一个主题来实现以下目标

我选择了一些城市:

<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
}