Button 角度,从.ts变量单击按钮函数

Button 角度,从.ts变量单击按钮函数,button,angular-material,angular8,Button,Angular Material,Angular8,如何将一个按钮从可变内容创建到my component.html中,并将详细信息设置到.ts文件中 .ts doStuff(anArg:string){ 警报(anArg) } buildItems(){ for(设i=0;i

如何将一个按钮从可变内容创建到my component.html中,并将详细信息设置到
.ts
文件中

.ts
doStuff(anArg:string){
警报(anArg)
}
buildItems(){
for(设i=0;i<3;i++){
arg1='something_u'+i
推({
onClick:'doStuff('+arg1+'),
ButtonText:'按钮文本,arg1:'+arg1
})
}
}//端函数
component.html

{{lItem.buttonText}
不起作用,生成的代码只是:
ng click=“lItem.onClick”
和任何
[ng click]=“lItem.onClick”
ng click=“{{lItem.onClick}”
给我一个编译错误


您对Angular 2+使用的语法无效

实际上,您应该这样做:

<div *ngFor="let lItem of items">
    <button (click)="lItem.onClick()">
        {{lItem.buttonTxt}}
    </button>
</div>

{{lItem.buttonText}
此外,您还在item对象的onClick属性中定义一个字符串。您应该改为使用一个函数:

buildItems(){
    for (let i = 0; i < 3; i++) {
        arg1 = 'something_' + i
        items.push({
            onClick: () => doStuff(arg1),
            buttonTxt: 'button_txt, arg1:' + arg1
        })
    }
}//end function
buildItems(){
for(设i=0;i<3;i++){
arg1='something_u'+i
推({
onClick:()=>doStuff(arg1),
ButtonText:'按钮文本,arg1:'+arg1
})
}
}//端函数

您对Angular 2+使用的语法无效

实际上,您应该这样做:

<div *ngFor="let lItem of items">
    <button (click)="lItem.onClick()">
        {{lItem.buttonTxt}}
    </button>
</div>

{{lItem.buttonText}
此外,您还在item对象的onClick属性中定义一个字符串。您应该改为使用一个函数:

buildItems(){
    for (let i = 0; i < 3; i++) {
        arg1 = 'something_' + i
        items.push({
            onClick: () => doStuff(arg1),
            buttonTxt: 'button_txt, arg1:' + arg1
        })
    }
}//end function
buildItems(){
for(设i=0;i<3;i++){
arg1='something_u'+i
推({
onClick:()=>doStuff(arg1),
ButtonText:'按钮文本,arg1:'+arg1
})
}
}//端函数

我的问题的解决方案如下

  • 将函数onClick属性封装到.ts中的函数对象中
  • @Elias Soares指出的按钮点击事件必须是
    (点击)
  • 最后,
    (单击)=“lItem.onClick()”
    语法触发onClick函数而不是属性
  • 注意,doStuff声明必须到同一个component.ts文件中,而不是
    app.component.ts
    ,因为它似乎不起作用
  • .ts
    doStuff(anArg:string){
    警报(anArg)
    }
    buildItems(){
    for(设i=0;i<3;i++){
    arg1='something_u'+i
    推({
    onClick:()=>{do_stuff('someCustomArgs:'+arg1)},//将函数onClick属性包含到函数对象中
    ButtonText:'按钮文本,arg1:'+arg1
    })
    }
    }//端函数
    
    component.html
    
    {{lItem.buttonText}
    
    我的问题的解决方案如下

  • 将函数onClick属性封装到.ts中的函数对象中
  • @Elias Soares指出的按钮点击事件必须是
    (点击)
  • 最后,
    (单击)=“lItem.onClick()”
    语法触发onClick函数而不是属性
  • 注意,doStuff声明必须到同一个component.ts文件中,而不是
    app.component.ts
    ,因为它似乎不起作用
  • .ts
    doStuff(anArg:string){
    警报(anArg)
    }
    buildItems(){
    for(设i=0;i<3;i++){
    arg1='something_u'+i
    推({
    onClick:()=>{do_stuff('someCustomArgs:'+arg1)},//将函数onClick属性包含到函数对象中
    ButtonText:'按钮文本,arg1:'+arg1
    })
    }
    }//端函数
    
    component.html
    
    {{lItem.buttonText}
    
    我添加了一个stackblitz示例
    onClick()
    加括号会给你一个
    错误:_v.context.$implicit.onClick不是一个函数
    它不是onClick,它只是单击
    lItem。onClick
    是一个设置到.ts文件中的变量,这就是目标。即使使用
    它也不起作用,请参阅我的StackBlitz,因为您的代码仍然是错误的。doStuff函数定义在哪里?我添加了一个带有括号的stackblitz示例
    onClick()
    将给您一个
    错误:_v.context.$implicit.onClick不是函数
    它不是onClick,它只是click
    lItem。onClick
    是一个设置到.ts文件中的变量,这就是目标。即使使用
    它也不起作用,请参阅我的StackBlitz,因为您的代码仍然是错误的。在哪里定义了doStuff函数?
    doStuff(anArg: string){
      alert(anArg)
    }
    
    
    buildItems(){
        for (let i = 0; i < 3; i++) {
            arg1 = 'something_' + i
            items.push({
                onClick: () => { do_stuff('someCustomArgs: ' + arg1) }, // enclose the function onClick property into a function object
                buttonTxt: 'button_txt, arg1:' + arg1
            })
        }
    }//end function
    
    <div *ngFor="let lItem of items">
        <button (click)="lItem.onClick()"> <!-- as when parenthesis are given a function call is triggered, otherwise its a property -->
            {{lItem.buttonTxt}}
        </button>
    </div>