样式大致如下:
需求为:
代码如下:
@Entry
@Component
struct Index {
// 输入框前的提示
userLabel:string = '用户名';
passwordLabel:string = '密码';
// 用户名和密码的状态变量
@State userName:string = '';
@State password:string = '';
// 输入框为了实现双向绑定而创建的回调函数
inputCallBack=(labelName:string,newValue:string)=>{
if (labelName === this.userLabel) {
this.userName = newValue;
} else {
this.password = newValue;
}
}
build() {
Row() {
Column() {
inputLabel({labelName:this.userLabel,value:this.userName,callBack:this.inputCallBack})
inputLabel({labelName:this.passwordLabel,value:this.password,callBack:this.inputCallBack})
Row(){
Button('登录')
.margin({right:30})
.onClick(()=>{
// 输出用户名和密码
console.log(this.userName);
console.log(this.password);
})
Button('重置')
.onClick(()=>{
// 清空用户名和密码
this.userName = '';
this.password = '';
})
}
}
.width('100%')
}
.height('100%')
}
}
// 组件构建函数
@Builder function inputLabel($$:{labelName:string,value:string,callBack:(labelName,newValue)=>void}){
Row() {
// 输入框前的提示
Text($$.labelName)
.fontSize(30)
.margin({ right: 20 })
TextInput({text:$$.value})
.width(200)
.onChange((newValue:string)=>{
// 因为不可以直接更改父组件状态变量的值,所以选择将新的值回调给父组件让其自行更改
$$.callBack($$.labelName,newValue)
})
}
.margin({ bottom: 10 })
Divider()
.margin({bottom:10})
}