加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > 安全 > 正文

angular2 组件之间传参数

发布时间:2020-12-17 09:51:48 所属栏目:安全 来源:网络整理
导读:将登陆框的用户名和密码传递到子组件,正确写法: Name: input [(ngModel)]="username" class="form-control"brPassword: input [(ngModel)]="password" class="form-control"button class="btn btn-sm btn-primary" (click)="submit()"提交/buttonhome-test

将登陆框的用户名和密码传递到子组件,正确写法:

Name: <input [(ngModel)]="username" class="form-control"><br>
Password: <input [(ngModel)]="password" class="form-control">
<button class="btn btn-sm btn-primary" (click)="submit()">提交</button>
<home-test [auth]="login"></home-test>
export class ExampleFather {

    username: any;
    password: any;
    login: any;

    submit() {
       this.login = this.getOption();
    }

    getOption() {
        let option = {
            username: this.username,password: this.password
        };
        return option;
    }

}
export class ChildComponent {

    @Input() auth: any;
    @Input('auth') set changeName(val: any) {
        console.log(val);
    }
}

这样写就能保证每次传递给子组件的login对象是新产生的,angular2 就能监听到对象变化

错误写法:

Name: <input [(ngModel)]="login.username" class="form-control"><br>
Password: <input [(ngModel)]="login.password" class="form-control">
<button class="btn btn-sm btn-primary" (click)="submit()">提交</button>
<home-test [auth]="login"></home-test>

这种写法在子组件中只能监听到一次,更改login对象的值是不会传递到子组件的,我试着用ngOnChanges来监听也没有变化,我理解在单向数据绑定的时候源数据的value值必须有明显的变化,而单个参数的value变化很容易监听到,但是传递对象时可能由于对象内部value变了但key没有变,使得angular2 认为整个对象就没有变化,所以在子组件中没有实时更新

正确写法的关键在于每次调用getOption方法时有创建新对象的动作,所以被监听到了

官网也解释了,Angular 只会在输入属性的值变化时调用生命周期钩子。 而login属性的值是一个对象的引用。 Angular 不会关注这个对象的属性的变化。 这个对象的引用没有发生变化,于是从 Angular 的视角看来,也就没有什么需要报告的变化了。相关知识:https://angular.cn/docs/ts/latest/guide/lifecycle-hooks.html

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读