vue开发技巧

319 阅读1分钟

1.watch初始化时立即执行

watch 是在监听属性改变时才会触发,初始化时并不会执行。

//使用时需要在created的时候手动调用一次,初始化时才会触发
export default {
    data() { return { searchText: 'Joe' } },
    created() {
        this.fetchUserList();
    },
    watch: {
      searchText: 'fetchUserList',
    },
    methods: {
        fetchUserList() { console.log(this.searchText)}
    }
}
//简便写法:可以添加immediate属性,这样初始化时也会触发
export default{
    data(){ return { searchText:''} },
    watch: {
        searchText: {
            handler: 'fetchUserList',
            immediate: true,
        }
    },
    methods:{
        featchUserList(){console.log(this.searchText)}
    }
}

2.路由组件传参--路由参数解耦

//一般在组件内传参用$route
export default {
    methods: {
        getParamsId() {
            return this.$route.params.id
        }
    }
}
const User = {
  template: '<div>User {{ $route.params.id }}</div>'
}
const router = new VueRouter({
  routes: [
    { path: '/user/:id', component: User }
  ]
})

在组件中使用 $route 会使之与其对应路由形成高度耦合,从而使组件只能在某些特定的 URL 上使用,限制了其灵活性。

正确的做法是通过props解耦

const User = {
  props: ['id'],
  template: '<div>User {{ id }}</div>'
}
const router = new VueRouter({
  routes: [
    { path: '/user/:id', component: User, props: true },
    // 对于包含命名视图的路由,你必须分别为每个命名视图添加 `props` 选项:
    {
      path: '/user/:id',
      components: { default: User, sidebar: Sidebar },
      props: { default: true, sidebar: false }
    }
  ]
})
//布尔模式返回props:将路由的props属性设置为true后,组件内可通过props接收到params参数
export default {
    props: ['id'],
    methods: {
        getParamsId() {
            return this.id
        }
    }
}
//函数模式返回props
const router = new VueRouter({
    routes: [{
        path: '/user/:id',
        component: User,
        props: (route) => ({
            id: route.query.id
        })
    }]
})

vue文档: router.vuejs.org/zh/guide/es…