一、 vue指令相关

模板 {{ }} 传入的是表达式一般具有返回值。
一般JS中常见的赋值表达式,逗号表达式,布尔表达式,函数表达式(匿名函数),以及三目运算符。

标签中的新属性

  • v-bind:我们能将 data 中的值绑定到当前属性中,可简写为 :
  • v-on:能够绑定实例中配置的事件,可简写为 @
  • v-for:列表级别渲染,迭代渲染所有⼦元素
  • v-if/v-else/v-show:控制⼦元素视图显隐
  • v-model:应⽤于表单,创建与元素的双向绑定
  • v-html:将最终值的结果渲染为 html
  • v-text:等同于直接在⽂本处使⽤ {{xx}}
  • v-cloak: 解决初始化的数据双向绑定问题 给根节点添加v-cloak,配合[v-cloak]:{ display: none}
  • v-once: v-once关联的实例,只会渲染一次。之后的重新渲染,实例极其所有的子节点将被视为静态内容跳过,这可以用于优化更新性能。

    <span v-once>This will never change:{{msg}}</span>  //单个元素
    <div v-once>//有子元素
      <h1>comment</h1>
      <p>{{msg}}</p>
    </div>
    <my-component v-once:comment="msg"></my-component>  //组件
    <ul>
      <li v-for="i in list">{{i}}</li>
    </ul>
    // 复制代码上面的例子中,msg,list即使产生改变,也不会重新渲染。
  • v-el: 可以使用v-el指令,去给这个元素注册一个索引,方便通过所属实例的$el访问这个元素。

    <span v-el:msg>hello</span>
    <span v-el:other-msg>world</span>
    this.$els.msg.textContent //-> "hello"
    this.$els.otherMsg.textContent// -> "world"
    this.$els.msg//-><span>hello</span>
    

    事件修饰符

      .stop 阻止事件继续传播
      .prevent 事件不再重载页面
      .capture 使用事件捕获模式,即元素自身触发的事件先在此处处理,然后才交由内部元素进行处理
      .self 只当在 event.target 是当前元素自身时触发处理函数 (例如把self放到了父元素上面,点击子元素,父元素的事件不被触发)
      .once 事件将只会触发一次
      .passive 告诉浏览器你不想阻止事件的默认行为
    

v-if & v-show 的区别
v-if 是惰性的,如果初始化渲染为false,则什么也不做,一直到条件第一次为true时,才会开始渲染,且配合v-else 使用,直接删除当前dom节点的,
v-show不管初始化条件是什么,都会被渲染,内在逻辑是display显示切换

综合而言, v-if 有更高的切换开销,v-show更高的初始化渲染开销,适合频繁的切换

二、 计算属性

computed: 只有依赖改变时才会触发重新计算, 惰性化,初始化执行一次,依赖改变触发执行,函数也有类似的功能,但是非依赖也会执行,计算属性无法传递值进去

三、render方法

runtime只加载运行时代码

<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <title>Document</title>
</head>
<body>
  <div id='app'>
  </div>
  <script src="https://cdn.jsdelivr.net/npm/vue@2.6.14/dist/vue.js"></script>
  <script>
    var app = new Vue({
      el:'#app',
      data:{
        message:'hello word'
      },
      render(createElement){
        return createElement('div', null, [createElement('span', null, this.message)]);
      }
    })
  </script>
</body>
</html>

四、vue组件

<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <title>Document</title>
  <script src="https://cdn.jsdelivr.net/npm/vue@2.6.14/dist/vue.js"></script>
</head>
<body>
  <div id='app'>
    <hello-world></hello-world>
    <hello-world></hello-world>
    <hello-world></hello-world>
  </div>  
  <script>
    Vue.component('hello-world', {
      data: function(){
        return {
          message: 'hello world'
        }
      },
      template: '<p>{{message}}</p>'
    })
    new Vue({ el: '#app' })
  </script>
</body>
</html>

五、插槽
插槽里面不可以用props,只能用插槽作用域的方式传递父数据

六、过滤器
过滤器没有this,不能访问this,指向undefined

七、路由
子组件用默认路由,父组件不可用name跳转
组件内的路由钩子
beforeRouteUpdate(to, from, next) {

this.getNews()
next();

}


小猿张
3 声望0 粉丝