Blogger Information
Blog 30
fans 0
comment 0
visits 13823
Popular Tutorials
More>
Latest Downloads
More>
Web Effects
Website Source Code
Website Materials
Front End Template
实例演示vue常用术语、样式与事件绑定、列表渲染
天宁
Original
327 people have browsed it

静态与动态页面

静态页面:纯静态
  1. <h1>hello world</h1>
动态界面:模板化静态页面:动态数据

模板由2部分构成:

  1. 原样显示的字面量,字符串,html标签,样式
  2. 插值:一个变量/表达式的占位符
  1. <h1 class="hello">{{message}}</h1>
  2. <script>
  3. // vue
  4. const app = Vue.createApp({
  5. data() {
  6. return {
  7. message: 'Hello 123666',
  8. };
  9. },
  10. }).mount('.hello');
  11. </script>

挂载点,vue实例,数据注入,响应式

挂载点:当前vue实例的作用域
  1. <div class="app">
  2. <p>用户名: {{ username }}</p>
  3. <p>会员等级: {{ rank }}</p>
  4. </div>;
vue实例
  1. const app = Vue.createApp(
  2. // vue实例配置对象,要写到一个{}
  3. {
  4. // vue中的变量/数据全部要写到一个data()
  5. data() {
  6. // 返回声明在vue实例上的所有变量
  7. return {
  8. username: '张老师',
  9. rank: '高级会员',
  10. };
  11. },
  12. }
  13. ).mount('.app');
数据注入
  1. // 数据注入
  2. console.log(app.username);
  3. // 完整注入
  4. console.log(app.$data.username);
  5. // 数据注入就是利用访问器属性的方式进行穿透访问的
  6. const obj = {
  7. $data: {
  8. email: '498668472@qq.com',
  9. },
  10. // 访问器属性
  11. get email() {
  12. return this.$data.email;
  13. },
  14. };
  15. console.log(obj.email);
响应式,vue实例中的数据,实时响应外部对数据的更新
  1. app.username = '马老师';

v-html,v-text:内容填充

innerHTML -> vue: v-html

textContent -> vue: v-text

  1. <div class="app">
  2. <!-- <p>用户名: {{username}}</p> -->
  3. <p>用户名: <span v-text="username"></span></p>
  4. <!-- 支持html样式 -->
  5. <p>用户名: <span v-html="username"></span></p>
  6. </div>
  7. <script>
  8. const app = Vue.createApp({
  9. data() {
  10. return {
  11. username: '张老师',
  12. };
  13. },
  14. }).mount('.app');
  15. app.username = '<i style="color:red">猪老师</i>';
  16. </script>

样式绑定,v-bind:属性

v-bind:属性,属性有:class,style等

  1. <style>
  2. .active {
  3. color: cyan;
  4. }
  5. </style>
  6. <div class="app">
  7. <!-- 行内 -->
  8. <p style="color: red">hello world</p>
  9. <!-- 完整写法 v-bind:属性 -->
  10. <p v-bind:style="style">Hello php.cn</p>
  11. <!-- 语法塘进行简化: v-bind:属性 ==> :属性 -->
  12. <p :style="style">Hello php.cn</p>
  13. <!-- 多个用对象 -->
  14. <p :style="{color:mycolor, background: mybackground}">Hello php.cn</p>
  15. <!-- class: 类样式 -->
  16. <p class="active">大家晚上好</p>
  17. <p :class="active">大家吃了吗</p>
  18. </div>
  19. <script>
  20. const app = Vue.createApp({
  21. data() {
  22. return {
  23. style: 'color:red',
  24. mycolor: 'blue',
  25. mybackground: 'yellow',
  26. active: 'active',
  27. };
  28. },
  29. }).mount('.app');
  30. </script>

双向数据绑定

绑定方法1:v-on: 事件属性, v-on 可简化 @
  1. <!-- 原本的v-on:input 点击输入框相应事件,简写成: @input -->
  2. <input type="text" @input="comment = $event.target.value">
绑定方法2:用 v-model
  1. <p>
  2. <input type="text" v-model="comment" :value="comment">
  3. <span>{{comment}}</span>
  4. </p>
  5. <!-- 延迟响应 .lazy: 失去焦点才响应 :value回显,把数据再回显到输入框中 -->
  6. <p>
  7. <input type="text" v-model.lazy="comment" :value="comment">
  8. <span>{{comment}}</span>
  9. </p>
  10. <script>
  11. const app = Vue.createApp({
  12. data() {
  13. return {
  14. comment: ''
  15. }
  16. },
  17. }).mount('.app')
  18. </script>

事件绑定与修饰符

v-on: @

event: $event

  1. <div class="app">
  2. <a href="https://www.php.cn/" @click="showUrl($event)">显示网址:</a>
  3. <span class="url">{{url}}</span>
  4. <hr />
  5. <!-- 使用事件修饰符来限定事件行为 prevent禁用默认行为-->
  6. <a href="https://www.php.cn/" @click.prevent="this.url = $event.target.href;">显示网址:</a>
  7. <span class="url">{{url}}</span>
  8. <hr />
  9. <p onclick="alert('Hello')">
  10. <!-- .stop: 防止冒泡 -->
  11. <a href="https://www.php.cn/" @click.prevent.stop="this.url = $event.target.href;">显示网址:</a>
  12. <span class="url">{{url}}</span>
  13. </p>
  14. </div>
  15. <script>
  16. const app = Vue.createApp({
  17. data() {
  18. return {
  19. url: null,
  20. };
  21. },
  22. methods: {
  23. showUrl(ev) {
  24. // 禁用默认行为(js原生方法)
  25. ev.preventDefault();
  26. // 防止冒泡(js原生方法)
  27. ev.stopPropagation();
  28. // this: 当前vue实例
  29. this.url = ev.target.href;
  30. },
  31. },
  32. }).mount('.app');
  33. </script>

列表渲染

v-for语法:<li v-for="(成员,下标) of 数组" :key="下标">{{下标}}=>{{成员}}</li>,标签可换,支持数组和对象

  1. <body>
  2. <div class="app">
  3. <ul>
  4. <!-- v-for -> for-of for (value of arr) {...} -->
  5. <!-- :key: 必须要添加,diff算法,key必须保证唯一性 -->
  6. <!-- <li v-for="city of cities">{{city}}</li> -->
  7. <!-- index唯一 -->
  8. <li v-for="(city,index) of cities" :key="index">{{index}}=>{{city}}</li>
  9. </ul>
  10. <hr />
  11. <ul>
  12. <!-- :key来干扰 diff算法 -->
  13. <li v-for="(item, key) of user" :key="key">{{key}}=>{{item}}</li>
  14. </ul>
  15. </div>
  16. <script>
  17. const app = Vue.createApp({
  18. data() {
  19. return {
  20. // array
  21. cities: ['合肥', '苏州', '上海'],
  22. // obj
  23. user: {
  24. name: '猪老师',
  25. email: 'zls@qq.com',
  26. },
  27. };
  28. },
  29. }).mount('.app');
  30. </script>
  31. </body>
Correcting teacher:PHPzPHPz

Correction status:qualified

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