vue(2)-----指令(1)

指令

  • vue分为指令和组件。
  • 指令的作用:是用来操作DOM的,指令就是绑定在DOM身上的一个属性,这个属性具备一定的功能。这个功能用来操作DNM。可以直接使用指令来操作DOM。
  • 这个指令需要模板语法的支持,采用jsx语法糖。

模板语法 mustache语法 双大括号语法

模板语法的支持程度还是很高的,数据类型都支持,但是不支持(console.log alert)。

<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <meta http-equiv="X-UA-Compatible" content="ie=edge">
    <title>Document</title>
</head>

<body>
    <div id="app">
        <p>{{msg}}</p>
        <p>{{str}}</p>
        <p>{{num}}</p>
        <p>{{nul&&'false'||'true'}}</p>
        <p>{{undefined&&'你的'||'WODE'}}</p>
        <P>{{arr[1]}}</P>
        <p>{{obg.name}}</p>
        <p>{{(function(){return '1+3333'})()}}</p>
        <p>{{msg.split('').reverse().join('')}}</p>
    </div>
</body>
<script src="../lib/vue.js"></script>

<script>
    var vm = new Vue({
        el: '#app',
        data: {
            msg: '你好',
            str: 'str',
            num: 4,
            nul: null,
            undefined: undefined,
            arr: [1, 2, 3, 4],
            obg: {
                name: 'st',
            }
        }
    })
</script>

</html>

指令

格式:

  • v-xxx = “mustache语法”
  • v-xxx = “msg”
  • v-xxx = “{{msg}}” ×
1. v-html 和 v-text
  • v-html 将一个数据展示在一个DOM内容中。
  • 防止脚本攻击 xss CSRF。
  • v-text 非转义输出。
<!DOCTYPE html>
<html lang="en">

<head>
   <meta charset="UTF-8">
   <meta name="viewport" content="width=device-width, initial-scale=1.0">
   <meta http-equiv="X-UA-Compatible" content="ie=edge">
   <title>Document</title>
</head>

<body>
   <div id="app">
       <p v-html='msg'>123123</p>
       <input type="text" :value='val'>
       <input type="text" v-bind:value='val'>

       <p v-html='a'></p>
       <p v-text='a'></p>
   </div>
</body>
<script src="../lib/vue.js"></script>
<script>
   new Vue({
       el: '#app',
       data: {
           msg: 'hello vue',
           val: '王某抽烟被拍摄了',
           a: '<strong>加粗了</string>'
       }
   })
</script>

</html>

2. v-bind 单项数据绑定

  • 使用技巧:凡是DOM的属性要和数据进行绑定,那么我们就可以使用v-bind
  • 格式:v-bind:DOMattr = “data”
  • 简写:DOMarrt = “data”
<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <meta http-equiv="X-UA-Compatible" content="ie=edge">
  <title>Document</title>
</head>
<body>
  <div id="app">
    
    <h3> v-bind 单项数据绑定 </h3>
    <input type="text"  v-bind:value = "val"/>
    <input type="text" :value = "val"/>
    <img :src="img" alt="">

  </div>
</body>
<script src="../lib/vue.js"></script>
<script>
  new Vue({
    el: '#app',
    data: {
      msg: 'hello Vue.js',
      val: '你是真的皮哦',
      img: 'https://www.baidu.com/img/dong_96c3c31cae66e61ed02644d732fcd5f8.gif',
    }
  })
</script>
</html>

3. class vs style

  1. class
    • object
        <div :class = "{[size]:true,[color]: true,[box]: true}"></div>
        <div :class = "{[size]: 5>2?true:false,[color]: true,[box]: true}"></div>
      
    • arr
        <div :class = "[size,box,color]"></div>
        <div :class = "[class_flag?size:'',box,color]"></div>
      
    • 推荐使用arr形式
  2. style
- object
  ```html
    <div :style = "{width:'100px',height: '100px',background: 'blue'}"></div>
    <div :style = "style"></div>
  ```
- arr
  ```html
    <div :style = "[style,border]"></div>
  ```

4. 条件渲染 v-if vs v-show

  • v-if 有三种使用形式

    • 单路分支
    • 双路分支
    • 多路分支
    1. v-if如果值为false,那么绑定的DOM就会被销毁。
    2. v-if 操作的是一个DOM的生成和销毁。
    3. v-if如果是false,那么这个DOM元素是不会渲染的。
    4. template标签如果放在模板的范围内使用,那么将来不会被解析渲染。
    <!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <meta http-equiv="X-UA-Compatible" content="ie=edge">
  <title>Document</title>
  <script src="https://cdn.bootcss.com/vue/2.6.10/vue.js"></script>
</head>
<body>
  <div id="app">
    <h3> v-if 单路</h3>
      <p v-if = "flag"> 单路分支 </p>
    <h3> v-if 双路 </h3>
      <p v-if = "flag"> 双路1 </p>
      <p v-else> 双路2 </p>
    <h3> v-if 多路 </h3>
      <p v-if = "type === 'A' "> A </p>
      <p v-else-if = " type === 'B'"> B </p>
      <p v-else> C </p>
  </div>
</body>
<script>
  new Vue({
    el: '#app',
    data: {
      msg: 'hello  下午到了',
      flag: false,
      type: 'A'
    }
  })
</script>
</html>
  • v-show
  1. v-show 操作的是一个DOM的dispay样式属性
  2. 如果v-show的初始值是false,那么这个绑定的DOM元素是否会渲染呢?
    • v-show不管值是什么,它都会渲染出来。
<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <meta http-equiv="X-UA-Compatible" content="ie=edge">
    <title>Document</title>
</head>

<body>
    <div id="app">

        <ul>
            <li v-show="flag">1</li>
            <li v-show='flag'>2上面的兄弟为何不显示</li>
            <template v-show='flag'>
                <li>3</li>
                <li>4</li>
            </template>
            <li>5</li>
            <li>6</li>
        </ul>
    </div>
</body>
<script src="../lib/vue.js"></script>
<script>
    new Vue({
        el: '#app',
        data: {
            flag: false,
        }
    })
</script>
</html>
  • v-if vs v-show区别
  • 一般来说,v-if 有更高的切换开销,而 v-show 有更高的初始渲染开销。因此,如果需要非常频繁地切换,则使用 v-show 较好;如果在运行时条件很少改变,则使用 v-if 较好。
  • v-show 不支持 元素,也不支持 v-else。

5. 列表渲染

v-for 是用来做列表渲染的

  • 格式
    v-for = " xxx in(of) data "
    举例:
    v-for = " item in(of) todos "

  • 带参数的格式
    v-for = " (item,index) in todos "

  • key( 留一部分 )

  • 每次列表循环的后面都要绑定一个key,是为了进行DOM的唯一标识,这样就不会让vue因为惰性而影响列表的正常渲染。

  • 理想的key是使用数据中的id。

<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <meta http-equiv="X-UA-Compatible" content="ie=edge">
    <title>Document</title>
</head>

<body>
    <div id="app">
        <ul>
            <li v-for='s in str'>{{s}}</li>
        </ul>
        <ul>
            <li v-for='n of num'>{{n}}</li>
        </ul>
        <ul>
            <li v-for='(item,index) in arr'>{{index}}{{item}}</li>
        </ul>
        <ul>
            <li v-for='(item,key,index) in obj'>{{index}}{{key}}:{{item}}</li>
        </ul>
        <button v-on:click='add'>添加</button>
        <ul>
            <li v-for='item in json'>
                <ul>
                    <li v-for='vsa in item'>
                        {{vsa}}
                    </li>
                </ul>
            </li>
        </ul>
    </div>
</body>
<script src="../lib/vue.js"></script>
<script>
    new Vue({
        el: '#app',
        data: {
            str: 'hello 你是真的皮哦',
            num: 5,
            arr: [1, 2, 4, 6, 8],
            obj: {
                id: 1,
                name: 'st',
                age: 22,
            },
            json: [{
                id: 1,
                text: '冲冲冲'
            }, {
                id: 2,
                text: '滚滚滚'
            }, {
                id: 3,
                text: '哎哎哎'
            }]
        },
        methods: {
            add() {
                this.json.push({
                    id: 3,
                    text: '打篮球',
                })
            },
            notChange() {
                this.$set(this.json, 0, '做作业');
            },
            clear() {
                this.json.splice(0, this.json.length);
            }
        },
        computed: {
            newJson() {
                return this.json.filter(item => {
                    return item.id > 1;
                })
            }
        }
    })
</script>

</html>
  • 数据的更新检测

    1. 使用以下方法操作数组,可以检测变动。
      1. push()
      2. pop()
      3. shift()
      4. unshift()
      5. splice()
      6. sort()
      7. reverse()
    2. 新数组替换旧数组
      1. filter()
      2. concat()
      3. slice()
      4. map()
     <h3> 新数组  computed - filter </h3>
    <ul>
      <li v-for = " item in newJson" :key = "item.id">
        {{ item.text }}
      </li>
    </ul>
       computed: { 
      newJson () {
        return this.json.filter( item => {
          return item.id>1 
        })
      }
    }
    
    1. 不能检测以下变动的数组
    • vm.items[indexOfItem]=newValue
    • 解决 (1)Vue.set(example1.items,indexOfItem,newValue)
    • vm.items.length = 0
    • 解决(1)splice

    notChange () {
        this.$set(this.json,0,'做作业')
      },

      clear () {
        // this.json.length = 0
        this.json.splice(0,this.json.length)
      }
  • methods 方法

  • 事件的添加使用的是 v-on:eventType = ‘事件处理程序’

    • 事件处理程序往options里面的methods配置项中书写
      <button v-on:click = "add"> + </button>
    
      new Vue({
        el: '#app',
        data: {
          arr: [1,2,3,4]
        },
        methods: {
          add () {
            this.arr.push(5)
          }
        }
      })
    
  • computed 计算属性

      1. 计算属性中存放的也是方法
      1. 计算属性的方法中必须要有返回值
      1. 计算属性的方法名可以像data选项中定义的数据一样使用
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
提供的源码资源涵盖了安卓应用、小程序、Python应用和Java应用等多个领域,每个领域都包含了丰富的实例和项目。这些源码都是基于各自平台的最新技术和标准编写,确保了在对应环境下能够无缝运行。同时,源码中配备了详细的注释和文档,帮助用户快速理解代码结构和实现逻辑。 适用人群: 这些源码资源特别适合大学生群体。无论你是计算机相关专业的学生,还是对其他领域编程感兴趣的学生,这些资源都能为你提供宝贵的学习和实践机会。通过学习和运行这些源码,你可以掌握各平台开发的基础知识,提升编程能力和项目实战经验。 使用场景及目标: 在学习阶段,你可以利用这些源码资源进行课程实践、课外项目或毕业设计。通过分析和运行源码,你将深入了解各平台开发的技术细节和最佳实践,逐步培养起自己的项目开发和问题解决能力。此外,在求职或创业过程中,具备跨平台开发能力的大学生将更具竞争力。 其他说明: 为了确保源码资源的可运行性和易用性,特别注意了以下几点:首先,每份源码都提供了详细的运行环境和依赖说明,确保用户能够轻松搭建起开发环境;其次,源码中的注释和文档都非常完善,方便用户快速上手和理解代码;最后,我会定期更新这些源码资源,以适应各平台技术的最新发展和市场需求。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值