博客列表 >初识 vue 以及几个常用的 v-指令的介绍

初识 vue 以及几个常用的 v-指令的介绍

手机用户1576673622
手机用户1576673622原创
2021年06月03日 17:58:21679浏览

1,vue导入(最重要)

导入方法和jq类似。
<script src="https://cdn.jsdelivr.net/npm/vue/dist/vue.js"></script>
之后

  1. <!-- 创建一个vue根节点 -->
  2. <div class="app">
  3. <!-- 那么这里的所有内容都可以用vue实例进行管理 -->
  4. <!-- 插值就是一个数据占位符 -->
  5. <p>用户名: {{username}}</p>
  6. <p>{{username + ', php.cn讲师'}}</p>
  7. <p>10 + 30 = {{ 10 + 30}}</p>
  8. <p>{{flag ? '上午好' : '睡觉了'}}</p>
  9. </div>
  10. <script src="https://cdn.jsdelivr.net/npm/vue/dist/vue.js"></script>
  11. <script>
  12. const vm = new Vue({
  13. // 当前Vue的配置项
  14. // 挂载点
  15. // el: document.querySelector('.app') 可简写
  16. el:'.app',
  17. //
  18. data:{
  19. username:'张三',
  20. flag:false,
  21. }
  22. })

如何查看data

  1. // 查看
  2. console.log(vm.$data.username);
  3. // 在data中声明的所有变量都自动变成vue实例的属性
  4. // 以上的过程就是数据注入
  5. console.log(vm.username);
  6. vm.username='李四';

2,vue中的几个常用指令

1。v-text v-html

  1. <div class="app">
  2. <p v-text="username">李四</p>
  3. </div>
  1. <script src="https://cdn.jsdelivr.net/npm/vue/dist/vue.js"></script>
  2. <script>
  3. const vm = new Vue({
  4. el: '.app',//不能挂在body和html上,它们有唯一性。
  5. data: {
  6. username: "张三",
  7. },
  8. })

v-text, v-html 在 html 中是不存在这样的属性的,它是专门由 Vue 实例管理的自定义属性,称之为“指令”。

v-text 指令 ====> innerText,textContent,它会覆盖掉原来的文本内容。p标签的李四会被张三覆盖

v-html
v-html 指令 ====> innerHTML, 它里边就不仅仅是纯文本了,还可以是 html 字符串

  1. <div class="app">
  2. <p v-html="username">李四</p>
  3. </div>
  4. <script src="https://cdn.jsdelivr.net/npm/vue/dist/vue.js"></script>
  5. <script>
  6. const vm = new Vue({
  7. el: '.app',
  8. data: {
  9. username: "<em style='color:red'>王五</em>",
  10. },
  11. })
  12. </script>

2。v-bind, v-on 指令

v-bind 指令是一个高频指令,它的作用是动态地绑定一个或多个 属性,或一个组件 prop 到表达式。它可以简写成冒号 “:”。

  1. <style>
  2. .active {
  3. color: violet;
  4. }
  5. .bigger {
  6. font-size: 2rem;
  7. }
  8. </style>
  1. <div class="app" >
  2. <!-- 绑定style属性 -->
  3. <p v-bind:style="style1">style: {{site}}</p>
  4. <!-- v-bind:是高频指令可简写成冒号 -->
  5. <p :style="`color:red`">style: {{site}}</p>
  6. <!-- 绑定类class属性 -->
  7. <p :class="`active bigger`">class1: {{site}}</p>
  8. <p :class="class1">class2: {{site}}</p>
  9. <!-- 控制样式的开关 -->
  10. <p :class="{active: isActive, bigger: isBigger}">class3: {{site}}</p>
  11. <p :class="[`active` ,`bigger`]">class4: {{site}}</p>
  12. </div>
  13. <script src="https://cdn.jsdelivr.net/npm/vue/dist/vue.js"></script>
  14. <script>
  15. const vm = new Vue({
  16. el: '.app',
  17. data: {
  18. site: 'php中文网',
  19. style1: 'color:red',
  20. class1: `active bigger`,
  21. isActive: true,
  22. isBigger: false,
  23. },
  24. })
  25. </script>


v-on 指令:绑定事件监听器。事件类型由参数指定。表达式可以是一个方法的名字或一个内联语句,如果没有修饰符也可以省略。
v-on 指令同样是一个高频指令,它可以简写成 “@”

  1. <div class="app" >
  2. <!-- 绑定事件 -->
  3. <p><a href="https://php.cn" v-on:click="show">显示网站名称1</a></p>
  4. <!-- 下面就阻止a标签的默认跳转行为 -->
  5. <!-- 事件修饰符prevent:防止元素的默认行为 -->
  6. <!-- v-on也是高频指令,可以简写为: @ -->
  7. <p><a href="https://php.cn" @click.prevent="show">显示网站名称2</a></p>
  8. <!-- stop:阻止冒泡 -->
  9. <p><a href="https://php.cn" @click.prevent.stop="show">显示网站名称3</a></p>
  10. <!-- 仅允许执行一次 -->
  11. <p><a href="https://php.cn" @click.prevent.stop.once="show">显示网站名称仅一次</a></p>
  12. <!-- 事件方法的传参 -->
  13. <!-- 事件对象的参数名必须是 $event -->
  14. <button @click.stop="handle($event, 100, 200)">click</button>
  15. </div>
  16. <script src="https://cdn.jsdelivr.net/npm/vue/dist/vue.js"></script>
  17. <script>
  18. const vm = new Vue({
  19. el: '.app',
  20. data: {
  21. site: 'php中文网',
  22. style1: 'color:red',
  23. class1: `active bigger`,
  24. isActive: true,
  25. isBigger: false,
  26. },
  27. methods: {
  28. show() {
  29. // this: 就是当前的vue实例对象
  30. alert(this.site)
  31. },
  32. handle(ev, a, b) {
  33. console.log(ev.type, ev.target);
  34. console.log("%d + %d = %d", a, b, (a + b));
  35. }
  36. },
  37. })
  38. </script>

3。v-model双向绑定

一般情况下页面上的数据都是响应式的,也就是单向绑定,就是页面中的数据随着 vue 实例中的数据变化而变化,而 v-model 指令的作用就是在表单控件或者组件上创建双向绑定。只要任何一方的数据发生变动,另一方的数据也会发生变化。

  1. <div class="app">
  2. <p>模型中的数据: {{site}}</p>
  3. <p></p>
  4. <!-- <p>双向绑定: <input type="text" :value="site" @input="site=$event.target.value"></p> -->
  5. <!-- 因为这种双向绑定比较常用,vue提供了一个语法糖 -->
  6. <!-- v-mode="site", ====> @input="site=$event.target.value" -->
  7. <p>双向绑定: <input type="text" v-model.lazy="site"></p>
  8. <p>双向绑定: <input type="text" v-model.number="num"></p>
  9. <p>{{typeof num}}</p>
  10. </div>
  11. <script src="https://cdn.jsdelivr.net/npm/vue/dist/vue.js"></script>
  12. <script>
  13. const vm = new Vue({
  14. el: '.app',
  15. data: {
  16. site: 'php中文网',
  17. num: "0",
  18. }
  19. })
  20. // vm.site = 'php.cn'
  21. </script>

4。v-for

v-for:简单来说就是遍历一个数组/对象,不过在 vue 中的 v-for 不是那么简单,它可以用来动态的生成列表。
v-for 的默认行为会尝试原地修改元素而不是移动它们。要强制其重新排序元素,你需要用特殊属性 key 来提供一个排序提示。key 只能是整数或是不重复的字符串,只有唯一,它才可以作为排序时的关键信息。

  1. <div class="app">
  2. <!-- key: 可以干预diff算法 -->
  3. <!-- vue通过稳定且唯一的key值判断这个节点是否需要重新渲染, 以提升效率 -->
  4. <!-- key只能是整数或不重复的字符串 -->
  5. <ul>
  6. <li v-for="(item,index) in items" :key="index">{{index}}--{{item}}</li>
  7. </ul>
  8. <ul>
  9. <li v-for="(item,prop,index) in user" :key="prop">{{prop}}--{{index}}--{{item}}</li>
  10. </ul>
  11. <ul>
  12. <li v-for=" (user, index) in users" :key="user.id">{{user.id}}--{{user.name}}--{{user.email}}</li>
  13. </ul>
  14. <span v-for="(n,i) in 10" :key="i">{{i}}--{{n}}<br></span>
  15. </div>
  16. <script src="https://cdn.jsdelivr.net/npm/vue/dist/vue.js"></script>
  17. <script>
  18. const vm = new Vue({
  19. el: ".app",
  20. data: {
  21. // 数组
  22. items: ["合肥", "苏州", "杭州"],
  23. // 对象
  24. user: {
  25. name: "天蓬",
  26. email: "tp@php.cn",
  27. },
  28. // 对象数组, 数据表的查询结果就是一个二个这样的二维的JSON
  29. users: [
  30. { id: 1, name: "天蓬", email: "tp@php.cn" },
  31. { id: 2, name: "灭绝", email: "mj@php.cn" },
  32. { id: 3, name: "西门", email: "xm@php.cn" },
  33. ],
  34. },
  35. });
  36. </script>

声明:本文内容转载自脚本之家,由网友自发贡献,版权归原作者所有,如您发现涉嫌抄袭侵权,请联系admin@php.cn 核实处理。
全部评论
文明上网理性发言,请遵守新闻评论服务协议