TS基础------ ts项目搭建-----------get新技能

全局安装过vue以后
在根目录创建 vue create ts-vu-demo 项目

在这里插入图片描述
选择手动
在这里插入图片描述
上下选择 空格键选择确认活取消 然后回车
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
![在这里插入图片描述](https://img-blog.csdnimg.cn/20210318154734431.png在这里插入图片描述

案例 简单实用demo

import { Component, Prop, Vue, Watch ,Emit, Model} from “vue-property-decorator”;

在这里插入图片描述

about.vue
<template>
  <div class="about">
    <h1>{{firstName}}{{lastName}}</h1>
    <p>{{fullName}}</p>
    <button @click="change">修改</button>
    <hr>
    <User  v-for="item in userList" :key="item.id" v-bind="item"  @on-remove="remove" @add-age="addAge"   v-model="firstName" ></User>
  </div>

</template>
<script lang="ts">
import { Component, Prop, Vue, Watch ,Emit, Model} from "vue-property-decorator";
import User from "../components/User.vue";
interface IUser {
  id: number;
  name: string;
  age: number;
  sex?: number;
}
@Component({
  name:"user",
  components:{
      //之定义属性
      User
  }
})

export default class About extends Vue {
  firstName: string = "zhang";
  lastName: string = "san";

  userList: Array<IUser> = [
    {
      id: 1,
      name: "zhangsan",
      age: 20,
      sex: 1
    },
    {
      id: 2,
      name: "zhangsan",
      age: 20,
      sex: 0
    },
    {
      id: 3,
      name: "zhangsan",
      age: 20,
      sex: 1
    },
    {
      id: 4,
      name: "zhangsan",
      age: 20,
      sex: 1
    }
  ];

  get fullName() {
    return this.firstName + "" + this.lastName;
  }
  set fullName(val) {
    const arr = val.split("");
    this.firstName = arr[0];
    this.lastName = arr[1];
  }
  change() {
    this.firstName = "li si";
  }
  @Watch("firstName")
  nFirstNameChang(newVal, oldVal) {
    console.log(newVal, oldVal);
  }



  remove(id:number){
   const index:number= this.userList.findIndex(userList=>userList.id===id)
    this.userList.splice(index,1)

  }

  addAge(id:number){
    const user:IUser=this.userList.find(userList=>userList.id===id)
  //  console.log(user);
   
     user.age++
   
  }

  created(){
    this.fullName="wang wu"
  }
  mounted(){

  }
}
</script>




User.vue
<template>
<div>
    姓名{{name}}
    性别:{{SEX[sex]}}
    年龄:{{age}}
    <button @click="addAge(id)">年龄+1</button>
    <button @click="remove(id)">删除</button>

    <hr>

    <div>
        fName: <input type="text" :value="fName" @input="onChangefName">
    </div>
</div>
</template>
<script lang="ts">
import { Component, Vue ,Prop,Emit,Model} from 'vue-property-decorator';
enum Sex{
    '男' = 1,
    "女" = 0
}
@Component({
  name:"User",
})
export default class User extends Vue{
    SEX:any=Sex
    @Prop(Number)
    id!:number;
     @Prop({type:String})
    name!:string;
     @Prop(Number)
     age!:number;
     @Prop({type:Number,default:1})
     sex!:number;


     @Emit("on-remove")
     remove(id:number){ }

     //不用Emit指定方法名也行
     @Emit()
     addAge(id:number){}


     @Emit('MODELchangeFirstName') ///这里要emit (model 事件)
     onChangefName(e:any){
         return e.target.value

     }


     @Model("MODELchangeFirstName",{type:String})  //
     fName!:string





}
</script>

<style>

</style>


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

前端成长营

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值