【三】vue的基本语法

一、代码规范

1.缩进4个空格、2个空格,推荐2个空格

二、模版语法

1、Mustache

  • 将data中的文本数据,插入到HTML中
    • 可以通过Mustache语法(也就是双大括号)
<body>
  <div id="app">
    <h2>{{message}}</h2>
    <h2>{{message}},李银河</h2>
    <!--musatache语法中,不仅 可以直接写变量,也可以写简单的表达式-->
    <h2>{{firstName + lastName}}</h2>
    <h2>{{firstName + ' ' + lastName}}</h2>
    <h2>{{firstName}} {{lastName}}</h2>
    <h2>{{counter * 2}}</h2>

  </div>  
  <script src="../js/vue.js"></script>
  <script>
    const app = new Vue({
      el: "#app",
      data: {
        message: '你好啊',
        firstName: 'kobe',
        lastName: 'bryant',
        counter: 100
      }
    })
  </script>
</body>

2、v-once

  • 不希望界面随意的跟随改变,可以使用vue的一个指令:v-once
  • 该指令后面不需要跟任何表达式(比如之前的v-for后面是有跟表达式的)
  • 该指令表示元素和组件只渲染一次,不会随着数据的改变而改变
<body>
  <div id="app">
    <h2>{{message}}</h2>
    <h2 v-once>{{message}}</h2>

  </div>
  <script src="../js/vue.js"></script>
  <script>
    const app = new Vue({
      el: "#app",
      data: {
        message: '你好啊'
      }
    })
  </script>
</body>

3、v-html

  • 某些情况下,我们从服务器请求到的数据本身就是一个HTML代码
    • 如果我们直接通过{{}}输出,会将HTML代码也一起输出
    • 按照HTML格式进行解析,并且显示对应的内容,可以使用v-html指令
    • 该指令后面往往会跟上一个string类型
    • 会将string的html解析出来并进行渲染
<body>
  <div id="app">
    <h2>{{url}}</h2>
    <h2 v-html="url">{{url}}</h2>

  </div>
  <script src="../js/vue.js"></script>
  <script>
    const app = new Vue({
      el: "#app",
      data: {
        message: '你好啊',
        url: '<a href="https://www.baidu.com">百度一下</a>'
      }
    })
  </script>
</body>

结果

4、v-text

  • v-text作用和Mustache比较相似:都是用于 将数据显示在界面中
  • v-text通常情况下,接受一个string类型
<body>
  <div id="app">
    <h2>{{message}}</h2>
    <h2 v-text="message"></h2>

  </div>
  <script src="../js/vue.js"></script>
  <script>
    const app = new Vue({
      el: "#app",
      data: {
        message: '你好啊'
      }
    })
  </script>
</body>

5、v-pre

  • 用于跳过这个元素和它自元素的编译过程,用于显示原本的Mustache语法
<body>
  <div id="app">
    <h2>{{message}}</h2>
    <h2 v-pre="message">{{message}}</h2>

  </div>
  <script src="../js/vue.js"></script>
  <script>
    const app = new Vue({
      el: "#app",
      data: {
        message: '你好啊'
      }
    })
  </script>

结果

6、v-cloak

  • 在某些情况下,浏览器可能会直接显示出未编译的Mustache标签
  • cloak:斗篷
<head>
  <meta charset="UTF-8">
  <meta http-equiv="X-UA-Compatible" content="IE=edge">
  <meta name="viewport" content="width=<device-width>, initial-scale=1.0">
  <title>Document</title>
  <style>
    [v-cloak]{
      display: none;
    }
  </style>
</head>
<body>
  <div id="app" v-cloak>
    <h2>{{message}}</h2>
  </div>
  <script src="../js/vue.js"></script>
  <script>
    //在div解析之前,div中有一个属性v-cloak
    //在div解析之后,div中没有一个属性v-cloak
    setTimeout(function(){
      const app = new Vue({
        el: "#app",
        data: {
          message: '你好啊'
        }
      })
    }, 1000)
  </script>
</body>

7、v-bind

  • 除了内容需要动态绑定外,某些属性我们也希望动态来绑定
    • 比如动态绑定a元素的href属性
    • 比如动态绑定img元素的src属性
  • 这个时候,我们可以使用v-bind指令
    • 作用:动态绑定属性
    • 缩写::
    • 预期:any(with argument)|Object (without argument)
    • 参数:attrOrProp(optional)
<body>
  <div id="app">
    <!--错误做法,这里不可以使用Mustache语法-->
    <!-- <img src="{{imgurl}}" alt=""> -->
    <!-- 正确做法,使用v-bind指令 -->
    <img v-bind:src="imgurl" alt="">
    <a v-bind:href="arhref">百度一下</a>

    <!--语法糖的写法-->
    <img :src="imgurl" alt="">
    <a :href="arhref">百度一下</a>
  </div>
  <script src="../js/vue.js"></script>
  <script>
    //在div解析之前,div中有一个属性v-cloak
    //在div解析之后,div中没有一个属性v-cloak
  const app = new Vue({
    el: "#app",
    data: {
      message: '你好啊',
      imgurl: 'https://upload-images.jianshu.io/upload_images/18396394-76fa65fca9046495.png?imageMogr2/auto-orient/strip|imageView2/2/w/1200/format/webp',
      arhref: 'http://www.baidu.com'
    }
  })
  </script>
</body>
  • 很多时候,我们希望动态的来切换class,比如
    • 当数据为某个状态是,字体显示红色
    • 当数据另一个状态是,字体显示黑色
  • 绑定class有两种方式:
    • 对象语法
    • 数组语法
      1、v-bind动态绑定class属性:对象语法
  • 对象语法的含义是:class后面跟的是一个对象
<body>
  <div id="app">
    <!-- <h2 class="active">{{message}}</h2>
    <h2 :class="active">{{message}}</h2> -->
    <!-- 通过控制boolean值决定标签是否有此类名 -->
    <!-- <h2 v-bind:class="{类名1: true, 类名2: false}">{{message}}</h2> -->
    <h2 v-bind:class="{active: isActive, line: isLine}">{{message}}</h2>
    <h2 v-bind:class="getClasses()">{{message}}</h2>
    <button v-on:click="btnclick">按钮</button>

  </div>
  <script src="../js/vue.js"></script>
  <script>

  const app = new Vue({
    el: "#app",
    data: {
      message: '你好啊',
      isActive: true,
      isLine: true
    },
    methods:{
      btnclick: function(){
        this.isActive = !this.isActive
      },
      getClasses: function(){
        return { active: this.isActive, line: this.isLine }
      }
    }
  })
  </script>
</body>

2、v-bind动态绑定class属性:数组语法

  • 当class数组里没有单/双引号时,按变量处理,结果是aaaaa bbbbb
  • 当class数组里有单/双引号时,按字符串处理,结果是active line
<body>
  <div id="app">
    <h2 class="title" v-bind:class="['active', 'line']">{{message}}</h2>
    <h2 v-bind:class="getClasses()">{{message}}</h2>

    <button v-on:click="btnclick">按钮</button>

  </div>
  <script src="../js/vue.js"></script>
  <script>

  const app = new Vue({
    el: "#app",
    data: {
      message: '你好啊',
      isActive: true,
      isLine: true,
      active: 'aaaaa',
      line: 'bbbbb'
    },
    methods: {
      getClasses: function () {
        return { active: this.isActive, line: this.isLine }
      }
    }
  })
  </script>
</body>

8、v-bind绑定style

  • 我们可以利用v-bind:style来绑定一些CSS内联样式
  • 在写CSS属性名的时候,比如font-size,我们可以使用驼峰式,fontSize
  • 或短横线分割:'font-size'
  • 绑定class有两种方式
    • 对象语法
      • style后面跟的是一个对象类型
        • 对象的key是CSS属性名称
        • 对象的value是具体赋的值
<body>
  <div id="app">
      <!-- <h2 :style="{key(属性名): value(属性值)}">{{message}}</h2> -->
      <!-- 50px必须加单引号,否则当成变量使用了 -->
      <h2 :style="{fontSize: '50px'}">{{message}}</h2>
      <!-- 把finalSize当成一个变量 -->
      <!-- <h2 :style="{fontSize: finalSize}">{{message}}</h2> -->
      <h2 :style="{fontSize: finalSize + 'px', color: finalColor}">{{message}}</h2>
      <h2 :style="getStyle()">{{message}}</h2>
  </div>
  <script src="../js/vue.js"></script>
  <script>

  const app = new Vue({
    el: "#app",
    data: {
      message: '你好啊',
      finalSize: 100,
      finalColor: 'red'
    },
    methods:{
      getStyle: function (){
        return { fontSize: this.finalSize + 'px', color: this.finalColor }
      }
    }
  })
  </script>
</body>
  • 数组语法
    - style后面跟的是一个数组类型:多个值,分割即可
<body>
  <div id="app">
      <h2 :style="[baseStyle, baseStyle1]">{{message}}</h2>
  </div>
  <script src="../js/vue.js"></script>
  <script>

  const app = new Vue({
    el: "#app",
    data: {
      message: '你好啊',
      baseStyle: {backgroundColor: 'red'},
      baseStyle1: {fontSize: '100px'}
    }
  })
  </script>
</body>
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 215,634评论 6 497
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 91,951评论 3 391
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 161,427评论 0 351
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 57,770评论 1 290
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 66,835评论 6 388
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,799评论 1 294
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,768评论 3 416
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,544评论 0 271
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,979评论 1 308
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,271评论 2 331
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,427评论 1 345
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,121评论 5 340
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,756评论 3 324
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,375评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,579评论 1 268
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,410评论 2 368
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,315评论 2 352

推荐阅读更多精彩内容

  • 一、Mustache 如何将data中的文本数据,插入到HTML中呢?我们已经学习过了,可以通过Mustache语...
    c_gentle阅读 1,646评论 0 0
  • Vue基础语法 内容概述 插值操作 绑定属性 计算属性 事件监听 条件判断 循环遍历 阶段案例 v-model 一...
    songstar阅读 482评论 0 0
  • Vue的基础语法 一、插值操作 ​ 1.使用Mustache语法获取data中的数据 示例: 使用Mustac...
    waigo阅读 465评论 0 1
  • MVVM的基本概念: M指的是数据(model),V是视图,VM是视图模型,将数据绑定视图上(双向绑定),view...
    Angrybird233阅读 328评论 0 5
  • mustache 语法 { { } } mustache 语法 将 data 中的数据在 DOM 元素上展示 在元...
    coderlion阅读 1,532评论 0 0