Blogger Information
Blog 29
fans 0
comment 0
visits 19775
Popular Tutorials
More>
Latest Downloads
More>
Web Effects
Website Source Code
Website Materials
Front End Template
初识 vue 以及几个常用的 v-指令的介绍
手机用户1576673622
Original
680 people have browsed it

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>

Correction status:Uncorrected

Teacher's comments:
Statement of this Website
The copyright of this blog article belongs to the blogger. Please specify the address when reprinting! If there is any infringement or violation of the law, please contact admin@php.cn Report processing!
All comments Speak rationally on civilized internet, please comply with News Comment Service Agreement
0 comments
Author's latest blog post