typescript Angular -双向绑定

nuypyhwy  于 2023-05-08  发布在  TypeScript
关注(0)|答案(3)|浏览(177)

我是Angular的初学者,我涉及双向绑定,但由于某种原因,我不明白我在下面做错了什么,任何输入都将受到赞赏。
我只是试图理解这个概念,所以下面的代码相当简单。据我所知
1.将双向绑定[()]添加到<app-child-comp>中,我将父字段“name”从父组件传递到父视图,并使用属性绑定向接收@Input字段中的值的子组件提供初始化值(默认值)。
1.一旦字段“@ InputchildName”使用正常插值获得了它的值,我就可以在子模板中随意使用该值。
1.现在,通过定义EventEmitter,然后使用它的.emit方法,我应该能够将变量上的任何更改传递回父组件,并更新DOM属性以反映更改。

问题:
现在这是我的问题,parent --> child方向绑定按预期工作,名称“Fin”出现在父模板的输入和子模板的插值中,但当我想改变子模板中的名称并将其冒泡回父属性时,它无法更新,尽管它更新了子模板中的插值。
我一直在试图弄清楚这一点,现在有一段时间,一切我的研究,我觉得说,我这样做是正确的,但如果你能解释我做错了什么,我会非常感激。

bzzcjhmw

bzzcjhmw1#

我添加这一点,以便任何人在未来可以从我的错误中吸取教训。
有两种方法可以在给定子组件的情况下执行事件绑定
1.第一种方法是显式声明属性和事件绑定,如下所示<app-child-comp [childName]="name" (childNameChange)="name =$event"></app-child-comp>
1.第二种方法是使用“香蕉盒”方法,其中子标记转换为<app-child-comp [(childName)]="name"></app-child-comp>
我尝试使用第二种方法,但不太清楚的是,子组件中的字段名称有一个命名约定,为了使“香蕉方法”工作,需要遵循**

**规则:**如果您的@Input字段名为“x”,则您的@Output EventEmitter需要命名为“xChange”,“Change”必须作为名称的第二部分。

语法:inputName + Change
因此,为了解决我的问题,我需要将命名约定从

@Input() childName:string;
@Output() changedName = new EventEmitter<string>();

@Input() childName:string;
@Output() childNameChange = new EventEmitter<string>();
wz8daaqr

wz8daaqr2#

您必须在根组件中添加输出:

<app-child-app [(childName)]="name" (changedName)="name = $event"></app-child-app>
lf3rwulv

lf3rwulv3#

它将发出一个子名称,但在应该发出地方提供选择器作为父组件中的属性绑定。并且在发出childnamechange时应该作为参数@Input()childName:string传递;@Output('childName')childNameChange = new EventEmitter();<app-child-app [(childName)]=“name”(changedName)=“name = $event”>

相关问题