vue常用技术总结

1、vue computed计算属性的应用场景,data,props都属于vue响应式数据,当发生变化时,就会重新渲染<template>,那么计算属性里的方法就会重新调用,因为computed里的方法,必有返回值。特点是对data,props里的数据加工处理,返回值往往也跟着改变,这样UI部分就真的更新了。
计算属性里的方法不能传参数,如果要传参数只能使用methods 里的方法
...mapState({
        disc: state => state.disc  }),
...mapGetters([
       'disc'
])
这两种值(mapState,mapGetters)的映射也要放到computed属性里。
**这两种值(mapActions,mapMutations)的映射也要放到methods方法里。

2、全局自定义组件的方法
先编写一个创建组件实例的方法如下:
import Vue from "vue";

// 创建一个新的根组件实例的方法,可以动态编译自身模板并挂载
function create (Component,props){
  // 创建一个Vue实例
  const instance = new Vue({
    render(h) {
      // 渲染函数:用于渲染指定模板为虚拟dom
      // <Component foo="bar" :el='el'>
      return h(Component,{props});
    }
  }).$mount(); // 执行挂载,若不指定选择器,则模板将被渲染为文档之外的元素

  // 必须使用原生dom api把它插入文档中
  // $el指的是渲染的Component中真实dom元素
  document.body.appendChild(instance.$el);

  // 获取enterComp实例,$children指的是当前Vue实例中包含的所有组件实例
  const enterComp = instance.$children[0];
  // 销毁实例的方法
  enterComp.remove = () => {
    instance.$destroy();
  }
  return enterComp;
};


// 暴露接口
export default create

然后提供一个具体的组件,比如小球运动的组件 BallAnim.vue,这个组件可以通过 props: ['el'],接收参数。
最后在适合的组件里调用create(),如下:
onAddCart(el) {
      // 自定义全局组件-小球动画
      const anim = create(BallAnim, {el});
      anim.start();
      anim.$on('transitionend', () => {
        anim.remove();
      })
    }
3、全局自定义组件的方法2
在main.js里引入
import KHeader from './components/Header.vue'
// 全局引入Header.vue
Vue.component('k-header', KHeader)
使用的时候,比如用在一个组件里,加入<k-header title="开课吧商城"></k-header>就可以了
    
4、父组件跟子组件的通信方法
父组件:<good-list :goods='goodslist'></good-list>
子组件:props:['goods'] 或者 props:{goods:{type:String,default:[]}}接收这个goodslist

5、子组件跟父组件的通信方法
子组件:this.$emit('event',props)
父组件:<good-list @event='handle'></good-list>

6、自己跟自己通信方法
发出事件订阅 this.$emit('event',props)
接受事件  this.$on('event', props => {
    
})

7、父组件的created先执行,然后执行子组件的created跟mounted,最后是执行父组件的mounted

8、vue-cli3 脚手架的安装
npm install -g @vue/cli

新建项目:
 vue create myproject
手动设置配置项,(Babel Router Vuex Linter/Formatter),然后设置falback,eslink width only,然后选择Lint on save.然后配置文件单独(In dedicated)不要写到packpage.json里,最后save this as(No)
启动项目:
npm run serve

9、element-ui的安装于配置
vue add element
不要选择full

 10、cube-ui的安装配置
vue add cube-ui
不要选择full,不使用rem不使用layout

11、用js写animation/transition(如果是animation还要依赖模块)动画的方法:
先npm install create-keyframe-animation --save
<transition name='normal' 
 @before-enter='beforeEnter'
 @enter='enter'
 @after-enter='afterEnter'
 @before-leave='beforeLeave'
 @leave='leave'
 @after-leave='afterLeave'>
   <div class='normal-player' v-show='fullScreen'>
   </div>
</transition>
当v-show由隐藏变显示会执行before-enter、enter、after-enter
当v-show由显示变隐藏会执行before-leave、leave、after-leave
具体看播放器项目player.vue
12、VUE项目配置环境
第一:根目录创建三个文件 .env.test .env.prod .env.dev 这三个文件是根据不同的模式自动载入项目中。
第二:package.josn中 添加
"test": "vue-cli-service build --mode test",
"dev": "vue-cli-service serve --mode dev",
"prod": "vue-cli-service build --mode prod"
当npm run dev时,就会把.env.dev载入项目,在main.js中process.env.VUE_APP_TITLE === 'dev'
13、vue-router的路由信息怎么获取呢?
一个路由条目:/login/:id?redirect=to.path
需要这样的匹配:/login/123?redirect=to.path
this.$router.push({
  path:'/login',
  query:{redirect:to.path},
  params:{id:123}
}) 路由跳转
this.$route.path  获取 /login
this.$route.query  获取查询参 {redirect:to.path}
this.$route.params 获取占位参{id:123}
原文地址:https://www.cnblogs.com/huaniaoyuchong/p/13919932.html