博客列表 >实例演示vue常用术语、样式与事件绑定、列表渲染

实例演示vue常用术语、样式与事件绑定、列表渲染

天宁
天宁原创
2022年04月20日 18:18:48326浏览

静态与动态页面

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