我有一个自定义的选择组件,当你点击一个li
项目时,它会设置模型,但由于我手动调用this.modelChange.next(this.model)
每次我更改模型时,它都会非常混乱,而且是可重复的,这是我想要避免的。
所以我的问题是,是否有类似于的东西。$watch
,我可以观察值是否发生变化,然后在每次发生时调用this.modelChange.next(this.model)
。
我一直在阅读可观测数据
,但我不知道如何将其用于一个简单的值,因为我看到的所有示例都是针对外部api: s的异步请求。
肯定有更简单的方法来实现这一点吗?
(并不是说我不能使用ngModelChange
,因为我实际上没有为此使用输入)。
import {Component, Input, Output, EventEmitter, OnInit, OnChanges} from 'angular2/core';
@Component({
selector: 'form-select',
templateUrl: './app/assets/scripts/modules/form-controls/form-select/form-select.component.html',
styleUrls: ['./app/assets/scripts/modules/form-controls/form-select/form-select.component.css'],
inputs: [
'options',
'callback',
'model',
'label'
]
})
export class FormSelectComponent implements OnInit, OnChanges {
@Input() model: any;
@Output() modelChange: EventEmitter = new EventEmitter();
public isOpen: boolean = false;
ngOnInit() {
if (!this.model) {
this.model = {};
}
for (var option of this.options) {
if (option.model == (this.model.model || this.model)) {
this.model = option;
}
}
}
ngOnChanges(changes: {[model: any]: SimpleChange}) {
console.log(changes);
this.modelChange.next(changes['model'].currentValue);
}
toggle() {
this.isOpen = !this.isOpen;
}
close() {
this.isOpen = false;
}
select(option, callback) {
this.model = option;
this.close();
callback ? callback() : false;
}
isSelected(option) {
return option.model === this.model.model;
}
}
编辑:我尝试使用ngOnChange
(见上面更新的代码),但它只在初始化时运行一次,然后它不会检测到更改。有什么不对劲吗?
ngAfterViewChecked是一种更好的生命周期方法,因为它在呈现DOM之后被调用,并且任何操作都可以在这里完成。
https://stackoverflow.com/a/35493028/6522875
如果您选择“自定义组件内部使用表单输入”,我将在其上利用ngModelChange事件:
<select [ngModel]="..." (ngModelChange)="triggerUpdate($event)">…</select>
或相应控件的可观察值变化(如有)。在模板中:
<select [ngFormControl]="myForm.controls.selectCtrl">…</select>
在组件中:
myForm.controls.selectCtrl.valueChanges.subscribe(newValue => {
(...)
});
所以我的问题是,是否有类似于$scope的东西。$watch在哪里我可以看到输入属性model
的值是否改变
如果model
是JavaScript基元类型(数字、字符串、布尔值),则可以实现ngOnChanges()
以获得更改通知。请参阅cookbook示例和lifecycle文档的OnChanges部分。
另一个选项是使用setter和getter。参见烹饪书示例。
如果Model
是一个JavaScript引用类型(Array, Object, Date等),那么如何检测更改取决于模型如何更改:
问题内容: 我的组件测试文件中有一个像这样的模拟模块 这些函数将在我的组件的渲染函数中调用以隐藏和显示某些特定功能。 我想对这些模拟函数的返回值的不同组合进行快照。 假设我有一个这样的测试用例 要运行此测试用例,我想更改模拟模块函数的返回值以使其动态变化 因为我已经一次导入了组件,所以我的模拟模块不会再次重新导入。所以它不会改变。我该如何解决? 问题答案: 您可以模拟该模块,以便它返回间谍并将其导
我正在开发一个。能让它一变就重启吗?我正在Coffeescript中开发它。是否可以监视以便在保存更改时重新启动?
我想每次改变整数变量时发送更新
我有两个组件,如下所示,我想从另一个组件调用一个函数。这两个组件都包含在第三个父组件 using 指令中。 构成部分1: 我尝试过使用和但我不知道如何使用它以及如何调用该函数,任何人都可以帮忙吗?
我正在建设与许多碎片的单一活动应用程序,我正在使用Jetpack导航组件。我在工具栏中有,这样当用户滚动内容时,工具栏就可以滚动,可以提供很大的空间,它可以正常工作。 但是在一个片段中,我有SearchView in Action Bar菜单,所以当用户从具有可滚动内容的片段导航到这个搜索片段时,SearchView和其他菜单项将自动隐藏。如何在创建/显示每个片段时使ActionBar/ToolB
每次在typeorm中更改密码时,我都尝试哈希密码 我如何在每次像这样更改时将isModified功能从typeorm中的mongoose复制到hash password: