• vue02模板语法


    目录

    一、插值

    1.文本        {{msg}} 

     2.html  

     使用v-html指令用于输出html代码

    3.属性 

     4.表达式

    5. class 绑定

    6.style 绑定 

    二、指令 

    核心指令

    1.v-if/v-else/if/v-else 

    2. v-show 与 v-if 的区别

    3. v-for

    4.v-model 是 数据的双向绑定

    v-bind 是 绑定属性

    v-on 是 绑定事件

    三、过滤器 

    过滤器的串联

     过滤器的传参

    四、计算属性与监听属性 

    1.计算属性 

    2.监听属性 

    五、购物车案例 

     六、总结

     1.插值

    2.指令 

    3.过滤器 

     4.计算属性与监听属性


    一、插值

    1.文本        {{msg}} 

    代码演示:

    1. html>
    2. <html>
    3. <head>
    4. <meta charset="utf-8">
    5. <script src="https://cdn.bootcdn.net/ajax/libs/vue/2.6.10/vue.js">script>
    6. <title>title>
    7. head>
    8. <body>
    9. <div id="app">
    10. <p>文本p>
    11. {{msg}}
    12. div>
    13. body>
    14. <script type="text/javascript">
    15. // 创建实例
    16. new Vue({
    17. // 挂载实例
    18. el:'#app',
    19. // 变量区
    20. data(){
    21. return {
    22. msg:'hello vue!!!'
    23. }
    24. }
    25. })
    26. script>
    27. html>

    运行结果如图所示:

     2.html  

     使用v-html指令用于输出html代码

    代码演示:

     

    运行结果如图所示: 

      

    所以我们要用到v-html指令输出html代码 

    1. html>
    2. <html>
    3. <head>
    4. <meta charset="utf-8">
    5. <script src="https://cdn.bootcdn.net/ajax/libs/vue/2.6.10/vue.js">script>
    6. <title>title>
    7. head>
    8. <body>
    9. <div id="app">
    10. <p>文本p>
    11. {{msg}}
    12. <p>html页面转义p>
    13. <div v-html="htmlstr">div>
    14. div>
    15. body>
    16. <script type="text/javascript">
    17. // 创建实例
    18. new Vue({
    19. // 挂载实例
    20. el:'#app',
    21. // 变量区
    22. data(){
    23. return {
    24. msg:'hello vue!!!',
    25. htmlstr:'文本内容'
    26. }
    27. }
    28. })
    29. script>
    30. html>

     运行结果如图所示:

    3.属性 

     HTML属性中的值应使用v-bind指令

    运行结果: 

    所以说我们要用v-bind 指令

    1. html>
    2. <html>
    3. <head>
    4. <meta charset="utf-8">
    5. <script src="https://cdn.bootcdn.net/ajax/libs/vue/2.6.10/vue.js">script>
    6. <title>title>
    7. head>
    8. <body>
    9. <div id="app">
    10. <p>文本p>
    11. {{msg}}
    12. <p>html页面转义p>
    13. <div v-html="htmlstr">div>
    14. <p>v-bind 属性绑定p>
    15. <input value="值" />
    16. <input v-bind:value="valuestr" />
    17. div>
    18. body>
    19. <script type="text/javascript">
    20. // 创建实例
    21. new Vue({
    22. // 挂载实例
    23. el:'#app',
    24. // 变量区
    25. data(){
    26. return {
    27. msg:'hello vue!!!',
    28. htmlstr:'文本内容',
    29. valuestr:'vue值'
    30. }
    31. }
    32. })
    33. script>
    34. html>

      

    运行结果如图所示: 

     4.表达式

    Vue 提供了完全的JavaScript 表达式支持

     {{str.substr(0,6).toUpperCase()}}

    {{number  + 1}}        {{ok ? 'YES' : 'NO'}}

  • 我的id是js动态生成的
    1. html>
    2. <html>
    3. <head>
    4. <meta charset="utf-8">
    5. <script src="https://cdn.bootcdn.net/ajax/libs/vue/2.6.10/vue.js">script>
    6. <title>title>
    7. head>
    8. <body>
    9. <div id="app">
    10. <p>文本p>
    11. {{msg}}
    12. <p>html页面转义p>
    13. <div v-html="htmlstr">div>
    14. <p>v-bind 属性绑定p>
    15. <input value="值" />
    16. <input v-bind:value="valuestr" />
    17. <input :value="valuestr" />
    18. <p>vue 中可以对变量进行二次处理或可以使用js的语法p>
    19. {{str.substring(0,4)}}<br/>
    20. {{num + 4}}<br>
    21. {{ok ? '1' : '0'}}<br>
    22. <span :id="idstr+'id'">书籍信息span>
    23. div>
    24. body>
    25. <script type="text/javascript">
    26. // 创建实例
    27. new Vue({
    28. // 挂载实例
    29. el:'#app',
    30. // 变量区
    31. data(){
    32. return {
    33. msg:'hello vue!!!',
    34. htmlstr:'文本内容',
    35. valuestr:'vue值',
    36. str:'hello world',
    37. num:6,
    38. ok:false,
    39. idstr:'book_'
    40. }
    41. }
    42. })
    43. script>
    44. html>

      

     运行结果如图所示:

    5. class 绑定

     使用方式:v-bind:class="expression"

    expression 的类型:字符串、数组、对象 

    第一个方式:

    1. html>
    2. <html>
    3. <head>
    4. <meta charset="utf-8">
    5. <script src="https://cdn.bootcdn.net/ajax/libs/vue/2.6.10/vue.js">script>
    6. <title>title>
    7. <style type="text/css">
    8. .a{
    9. color: greenyellow;
    10. }
    11. style>
    12. head>
    13. <body>
    14. <div id="app">
    15. <p>class 绑定p>
    16. <span class="a">文本内容span>
    17. div>
    18. body>
    19. <script type="text/javascript">
    20. // 创建实例
    21. new Vue({
    22. // 挂载实例
    23. el:'#app',
    24. // 变量区
    25. data(){
    26. return {
    27. }
    28. }
    29. })
    30. script>
    31. html>

     第二种方式:

    1. html>
    2. <html>
    3. <head>
    4. <meta charset="utf-8">
    5. <script src="https://cdn.bootcdn.net/ajax/libs/vue/2.6.10/vue.js">script>
    6. <title>title>
    7. <style type="text/css">
    8. .a{
    9. color: greenyellow;
    10. }
    11. style>
    12. head>
    13. <body>
    14. <div id="app">
    15. <p>class 绑定p>
    16. <span :class="classStr">文本内容span>
    17. div>
    18. body>
    19. <script type="text/javascript">
    20. // 创建实例
    21. new Vue({
    22. // 挂载实例
    23. el:'#app',
    24. // 变量区
    25. data(){
    26. return {
    27. classStr:'a'
    28. }
    29. }
    30. })
    31. script>
    32. html>

    运行结果都是一样的: 

    6.style 绑定 

    v-bind:style="expression"

    expression 的类型:字符串、数组、对象 

    1. html>
    2. <html>
    3. <head>
    4. <meta charset="utf-8">
    5. <script src="https://cdn.bootcdn.net/ajax/libs/vue/2.6.10/vue.js">script>
    6. <title>title>
    7. head>
    8. <body>
    9. <div id="app">
    10. <p>style 绑定p>
    11. <span :style="styleStr">文本内容span>
    12. div>
    13. body>
    14. <script type="text/javascript">
    15. // 创建实例
    16. new Vue({
    17. // 挂载实例
    18. el:'#app',
    19. // 变量区
    20. data(){
    21. return {
    22. styleStr:'color:blue;'
    23. }
    24. }
    25. })
    26. script>
    27. html>

    运行结果如图所示: 

    二、指令 

     指令指的是带有 “v-” 前缀的特殊属性

    核心指令

     (v-if|v-else|v-else-if)/v-show/v-for/v-bind/v-on/v-model

     v-if|v-else|v-else-if:根据其后表达式的bool值进行判断是否渲染该元素

    他们只能是兄弟元素

    v-else-if上一个兄弟元素必须是v-if

    v-else上一个兄弟元素必须是v-if或者是v-else-if

      v-show与v-if类似,只是会渲染其身后表达式为false的元素,而且会给这样的元素添加css代码:style="display:none"

      v-for:类似JS的遍历,

     遍历数组: v-for="item in items", items是数组,item为数组中的数组元素

     遍历对象: v-for="(value,key,index) in stu", value属性值,key属性名,index下标

      v-bind  :绑定属性 

      v-on  :绑定事件

      v-model:数据的双向绑定

    v-model:用来在 input、select、textarea、checkbox、radio 等表单控件元素上创建双向数据绑定,根据表单上的值,自动更新绑定的元素的值   

    v-for/v-model一起绑定[多选]复选框和单选框  

    1.v-if/v-else/if/v-else 

    1. html>
    2. <html>
    3. <head>
    4. <meta charset="utf-8">
    5. <script src="https://cdn.bootcdn.net/ajax/libs/vue/2.6.10/vue.js">script>
    6. <title>title>
    7. head>
    8. <body>
    9. <div id="app">
    10. <p>v-ifp>
    11. 请输入分数:<input v-model="score" />
    12. 对应的结果:
    13. <span v-if="score<60">不及格span>
    14. <span v-else-if="score<70">及格span>
    15. <span v-else-if="score<80">span>
    16. <span v-else-if="score<90">优秀span>
    17. <span v-else-if="score<=100">优+span>
    18. <span v-else="">输入格式不正确span>
    19. div>
    20. body>
    21. <script type="text/javascript">
    22. // 创建实例
    23. new Vue({
    24. // 挂载实例
    25. el:'#app',
    26. // 变量区
    27. data(){
    28. return{
    29. score:0
    30. }
    31. }
    32. })
    33. script>
    34. html>

    运行结果如图所示:   输入什么就对应的什么 

     

    2. v-show 与 v-if 的区别

     v-show是通过display=none去隐藏了这个标签,而v-if 连这个标签的没有了

    代码演示:

    1. html>
    2. <html>
    3. <head>
    4. <meta charset="utf-8">
    5. <script src="https://cdn.bootcdn.net/ajax/libs/vue/2.6.10/vue.js">script>
    6. <title>title>
    7. head>
    8. <body>
    9. <div id="app">
    10. <p>v-showp>
    11. 请输入结果:<input v-model="showflag" />
    12. <span v-show="showflag">show:展示与否span>
    13. <span v-if="showflag">if:展示与否span>
    14. div>
    15. body>
    16. <script type="text/javascript">
    17. // 创建实例
    18. new Vue({
    19. // 挂载实例
    20. el:'#app',
    21. // 变量区
    22. data(){
    23. return{
    24. showflag:false
    25. }
    26. }
    27. })
    28. script>
    29. html>

    运行结果如图所示:

    3. v-for

    注意:下拉框是写在里面, 复选框是写在外面

    1. html>
    2. <html>
    3. <head>
    4. <meta charset="utf-8">
    5. <script src="https://cdn.bootcdn.net/ajax/libs/vue/2.6.10/vue.js">script>
    6. <title>title>
    7. head>
    8. <body>
    9. <div id="app">
    10. <p>v-forp>
    11. <select>
    12. <option v-for="l in likes" :value="l.id">{{l.name}}option>
    13. select>
    14. <br />
    15. <div v-for="l in likes">
    16. <input type="checkbox" :value="l.id"/>{{l.name}}
    17. div>
    18. div>
    19. body>
    20. <script type="text/javascript">
    21. // 创建实例
    22. new Vue({
    23. // 挂载实例
    24. el: '#app',
    25. // 变量区
    26. data() {
    27. return {
    28. likes: [{
    29. id: 1,
    30. name: '军旗'
    31. },
    32. {
    33. id: 2,
    34. name: '桌球'
    35. },
    36. {
    37. id: 3,
    38. name: '乒乓球'
    39. },
    40. {
    41. id: 4,
    42. name: '篮球'
    43. }
    44. ]
    45. }
    46. }
    47. })
    48. script>
    49. html>

    运行结果如图所示:

    4.v-model 是 数据的双向绑定

    v-bind 是 绑定属性

    v-on 是 绑定事件

    Ctrl+k是格式化代码,重新对齐               上面整合的代码:

    1. html>
    2. <html>
    3. <head>
    4. <meta charset="utf-8">
    5. <script src="https://cdn.bootcdn.net/ajax/libs/vue/2.6.10/vue.js">script>
    6. <title>title>
    7. head>
    8. <body>
    9. <div id="app">
    10. <p>v-ifp>
    11. 请输入分数:<input v-model="score" />
    12. 对应的结果:
    13. <span v-if="score<60">不及格span>
    14. <span v-else-if="score<70">及格span>
    15. <span v-else-if="score<80">span>
    16. <span v-else-if="score<90">优秀span>
    17. <span v-else-if="score<=100">优+span>
    18. <span v-else="">输入格式不合法span>
    19. <p>v-showp>
    20. 请输入结果:<input v-model="showflag" />
    21. <span v-show="showflag">show:展示与否span>
    22. <span v-if="showflag">if:展示与否span>
    23. <p>v-forp>
    24. <select>
    25. <option v-for="l in likes" :value="l.id">{{l.name}}option>
    26. select>
    27. <br />
    28. <div v-for="l in likes">
    29. <input type="checkbox" :value="l.id"/>{{l.name}}
    30. div>
    31. div>
    32. body>
    33. <script type="text/javascript">
    34. // 创建实例
    35. new Vue({
    36. // 挂载实例
    37. el: '#app',
    38. // 变量区
    39. data() {
    40. return {
    41. score: 0,
    42. showflag: false,
    43. likes: [{
    44. id: 1,
    45. name: '军旗'
    46. },
    47. {
    48. id: 2,
    49. name: '桌球'
    50. },
    51. {
    52. id: 3,
    53. name: '乒乓球'
    54. },
    55. {
    56. id: 4,
    57. name: '篮球'
    58. }
    59. ]
    60. }
    61. }
    62. })
    63. script>
    64. html>

    三、过滤器 

     一般会使用全局过滤器

    Vue.filter('filterName', function (value) {

     // value 表示要过滤的内容

    });

    局部过滤器

    new Vue({

     filters:{'filterName':function(value){}}

    });

    vue允许你自定义过滤器,被用作一些常见的文本格式化,格式如下:

    {{ name | capitalize }}

    注1:过滤器函数接受表达式的值作为第一个参数

    注2:过滤器可以串联     

    {{ message | filterA | filterB }}

    注3:过滤器是JavaScript函数,因此可以接受参数:

    {{ message | filterA('arg1', arg2) }}

    注4:js定义一个类

    function Stu(){};

    Stu.prototype.add(a,b){};//添加一个新的实例方法

    Stu.update(a,b){};//添加一个新的类方法

    过滤器:时间格式,翻译,多一个点0,时间的处理,数据的处理都可以通过过滤器来处理 

    1. html>
    2. <html>
    3. <head>
    4. <meta charset="utf-8">
    5. <script src="https://cdn.bootcdn.net/ajax/libs/vue/2.6.10/vue.js">script>
    6. <title>title>
    7. head>
    8. <body>
    9. <div id="app">
    10. {{msg|strSplit}}
    11. div>
    12. body>
    13. <script type="text/javascript">
    14. // 前端的打断点
    15. // debugger;
    16. // strSplit:过滤器的名字
    17. Vue.filter('strSplit',function(value){
    18. // value:处理的变量
    19. console.log(value);
    20. return value;
    21. })
    22. // 创建实例
    23. new Vue({
    24. // 挂载实例
    25. el:'#app',
    26. // 变量区
    27. data(){
    28. return{
    29. msg:'hello vue!!!'
    30. }
    31. }
    32. })
    33. script>
    34. html>

    运行结果如图所示: 

    运行的结果如图所示:​​​​​​​ 

    过滤器的串联

     过滤器的传参

    1. html>
    2. <html>
    3. <head>
    4. <meta charset="utf-8">
    5. <script src="https://cdn.bootcdn.net/ajax/libs/vue/2.6.10/vue.js">script>
    6. <title>title>
    7. head>
    8. <body>
    9. <div id="app">
    10. {{msg|strSplit|strSplit2}}
    11. {{msg|strSplit3(2,5)}}
    12. {{msg|strSplit3(1,4)}}
    13. div>
    14. body>
    15. <script type="text/javascript">
    16. // strSplit:过滤器的名字
    17. Vue.filter('strSplit',function(value){
    18. // 前端的打断点
    19. // debugger;
    20. // value:处理的变量
    21. console.log(value);
    22. return value.substring(0,5);
    23. })
    24. Vue.filter('strSplit2',function(value){
    25. // value:处理的变量
    26. console.log(value);
    27. return value.substring(3,5);
    28. })
    29. Vue.filter('strSplit3',function(value,a,b){
    30. // value:处理的变量
    31. console.log(value);
    32. return value.substring(a,b);
    33. })
    34. // 创建实例
    35. new Vue({
    36. // 挂载实例
    37. el:'#app',
    38. // 变量区
    39. data(){
    40. return{
    41. msg:'hello vue!!!'
    42. }
    43. }
    44. })
    45. script>
    46. html>

    运行结果如图所示: 

    四、计算属性与监听属性 

    这些写就会拼接起来    

     如图所示:

    1.计算属性 

     监听属性:是你输入的两个值直接影响到这个结果   单方面的影响

     代码块:

    1. html>
    2. <html>
    3. <head>
    4. <meta charset="utf-8">
    5. <script src="https://cdn.bootcdn.net/ajax/libs/vue/2.6.10/vue.js">script>
    6. <title>title>
    7. head>
    8. <body>
    9. <div id="app">
    10. <p>计算属性p>
    11. 请输入第一个数<input v-model="x" /><br>
    12. 请输入第二个数<input v-model="y" /><br>
    13. 结果为:{{addFlag}}
    14. div>
    15. body>
    16. <script type="text/javascript">
    17. // 创建实例
    18. new Vue({
    19. // 挂载实例
    20. el:'#app',
    21. // 变量区
    22. data(){
    23. return {
    24. x:0,
    25. y:0
    26. }
    27. },computed:{
    28. // 计算属性
    29. addFlag:function(){
    30. return parseInt(this.x) + parseInt(this.y)
    31. }
    32. }
    33. })
    34. script>
    35. html>

     运行结果如图所示:

    2.监听属性 

     监听属性:是相互之间印象

     代码块:

    1. html>
    2. <html>
    3. <head>
    4. <meta charset="utf-8">
    5. <script src="https://cdn.bootcdn.net/ajax/libs/vue/2.6.10/vue.js">script>
    6. <title>title>
    7. head>
    8. <body>
    9. <div id="app">
    10. <p>计算属性p>
    11. 请输入第一个数<input v-model="x" /><br>
    12. 请输入第二个数<input v-model="y" /><br>
    13. 结果为:{{addFlag}}
    14. <p>监听属性p>
    15. 请输入千米:<input v-model="km" /><br>
    16. 请输入米:<input v-model="m" /><br>
    17. div>
    18. body>
    19. <script type="text/javascript">
    20. // 创建实例
    21. new Vue({
    22. // 挂载实例
    23. el: '#app',
    24. // 变量区
    25. data() {
    26. return {
    27. x: 0,
    28. y: 0,
    29. km:0,
    30. m:0
    31. }
    32. },
    33. computed: {
    34. // 计算属性
    35. addFlag: function() {
    36. return parseInt(this.x) + parseInt(this.y)
    37. }
    38. },
    39. watch:{
    40. km:function(v){
    41. // :之前对应的是被监听的属性,v指的是被监听属性的值
    42. // 当v对应的值发生变化的时候,会执行这个方法
    43. // v代表的是千米
    44. this.m = parseInt(v)*1000;
    45. },
    46. m:function(v){
    47. this.km = parseInt(v)/1000;
    48. }
    49. }
    50. })
    51. script>
    52. html>

    运行结果如图所示: 

    五、购物车案例 

    1. html>
    2. <html>
    3. <head>
    4. <meta charset="utf-8">
    5. <script src="https://cdn.bootcdn.net/ajax/libs/vue/2.6.10/vue.js">script>
    6. <title>title>
    7. head>
    8. <body>
    9. <div id="app">
    10. <p>购物车p>
    11. <table>
    12. <tr>
    13. <td>物品td>
    14. <td>单价td>
    15. <td>数量td>
    16. <td>小计td>
    17. tr>
    18. <tr>
    19. <td>帽子td>
    20. <td>{{maoziDanJia}}td>
    21. <td>
    22. <input v-model="maoziShuLiang" />
    23. td>
    24. <td>{{maoziXiaoJi}}td>
    25. tr>
    26. <tr>
    27. <td>衣服td>
    28. <td>{{yifuDanJia}}td>
    29. <td>
    30. <input v-model="yifuShuLiang" />
    31. td>
    32. <td>{{yifuXiaoJi}}td>
    33. tr>
    34. <tr>
    35. <td>裤子td>
    36. <td>{{kuziDanJia}}td>
    37. <td>
    38. <input v-model="kuziShuLiang" />
    39. td>
    40. <td>{{kuziXiaoJi}}td>
    41. tr>
    42. <tr>
    43. <td>总价td>
    44. <td colspan="2">td>
    45. <td>{{zojia}}td>
    46. tr>
    47. table>
    48. div>
    49. body>
    50. <script type="text/javascript">
    51. new Vue({
    52. el:'#app',
    53. data(){
    54. return{
    55. maoziShuLiang:1,
    56. yifuShuLiang:1,
    57. kuziShuLiang:1,
    58. maoziDanJia:20,
    59. yifuDanJia:3000,
    60. kuziDanJia:700
    61. }
    62. },
    63. computed:{
    64. // 因为数量 会影响小计,小计不会影响数量,所以使用计算属性
    65. maoziXiaoJi:function(){
    66. return parseInt(this.maoziDanJia) * parseInt(this.maoziShuLiang);
    67. },
    68. yifuXiaoJi:function(){
    69. return parseInt(this.yifuDanJia) * parseInt(this.yifuShuLiang);
    70. },
    71. kuziXiaoJi:function(){
    72. return parseInt(this.kuziDanJia) * parseInt(this.kuziShuLiang);
    73. },
    74. zojia:function(){
    75. return parseInt(this.maoziXiaoJi + this.yifuXiaoJi + this.kuziXiaoJi);
    76. }
    77. }
    78. })
    79. script>
    80. html>

     运行结果如图所示:

     六、总结

     1.插值

     {{文本}}

    v-html

    v-bind        绑定属性

    2.指令 

     v-if/v-else-if/v-else

    v-show  & v-if   的区别

     v-show是通过display=none去隐藏了这个标签,而v-if 连这个标签的没有了

    v-for

    3.过滤器 

     定义:Vue.filter('filterName',function(value){})

    串联过滤器

    过滤器传参

     4.计算属性与监听属性

    计算属性是 一方依赖于另一方

    监听属性是   相互依赖,相互影响

  • 相关阅读:
    51单片机入门
    【PHP图片托管】CFimagehost搭建私人图床 - 无需数据库支持
    【Linux】 ubuntu ffmpeg环境配置
    为什么需要在微服务中使用链路追踪?Spring Cloud 可以选择哪些微服务链路追踪方案?
    pytorch基础学习个人笔记(3)
    关于linux与android传输代码tcp -传文件
    容联七陌携手岚时科技,解决医美机构回访3大痛点
    解决 /bin/bash^M: bad interpreter: No such file or directory
    C盘满了,应该清理哪些地方
    解决 Android 分享到小程序 封面显示不全
  • 原文地址:https://blog.csdn.net/weixin_67465673/article/details/126666592