• 第4篇 vue的基本语法操作以及组件,声明周期,路由的操作


    一 vue常用操作案例

    1.1 事件渲染

    1.数据渲染的方式:使用插值表达式{{}}进行数据渲染

    2.数据渲染的方式:以使用 v-bind指令,它的简写的形式就是一个冒号(:),v-bind 特性被称为指令。指令带有前缀 v-

    代码

    1. <!DOCTYPE html>
    2. <html lang="en">
    3. <head>
    4. <meta charset="UTF-8">
    5. <meta name="viewport" content="width=device-width, initial-scale=1.0">
    6. <meta http-equiv="X-UA-Compatible" content="ie=edge">
    7. <title>Document</title>
    8. </head>
    9. <body>
    10. <div id="app">
    11. <!-- {{}} 插值表达式,绑定vue中的data数据 -->
    12. div中内容: {{ message }}
    13. <h1 :title="info">
    14. {{ message }}
    15. </h1>
    16. <h2 v-bind:title="content">
    17. {{ message }}
    18. </h2>
    19. </div>
    20. <h1 v-bind:class="myClass">这是一个标题</h1>
    21. <script src="vue.min.js"></script>
    22. <script>
    23. new Vue({
    24. el: '#app',
    25. data: {
    26. message: '页面加载于 ' + new Date().toLocaleString(),
    27. content: '我是标题',
    28. info: '好痛苦..........',
    29. myClass: 'red'
    30. }
    31. })
    32. </script>
    33. </body>
    34. </html>

    2.结果:

    1.2 双向绑定

    v-model 可以进行双向的数据绑定;

    v-bind:value只能进行单向的数据渲染;

    代码

    1. <!DOCTYPE html>
    2. <html lang="en">
    3. <head>
    4. <meta charset="UTF-8">
    5. <meta name="viewport" content="width=device-width, initial-scale=1.0">
    6. <meta http-equiv="X-UA-Compatible" content="ie=edge">
    7. <title>Document</title>
    8. </head>
    9. <body>
    10. <div id="app">
    11. <!-- v-bind:value只能进行单向的数据渲染 -->
    12. <input type="text" v-bind:value="searchMap.keyWord">
    13. <p>您要查询的是:{{searchMap.keyWord}}</p>
    14. <!-- v-model 可以进行双向的数据绑定 -->
    15. <input type="text" v-model="searchMap.keyWord">
    16. </div>
    17. <script src="vue.min.js"></script>
    18. <script>
    19. new Vue({
    20. el: '#app',
    21. data: {
    22. searchMap:{
    23. keyWord: '我爱北京'
    24. }
    25. }
    26. })
    27. </script>
    28. </body>
    29. </html>

    2.页面

    1.3 click事件

    1.说明

     v-on 指令绑定事件,click指定绑定的事件类型,事件发生时调用vue中methods节点中定义的方法

    2.代码

    1. <!DOCTYPE html>
    2. <html lang="en">
    3. <head>
    4. <meta charset="UTF-8">
    5. <meta name="viewport" content="width=device-width, initial-scale=1.0">
    6. <meta http-equiv="X-UA-Compatible" content="ie=edge">
    7. <title>Document</title>
    8. </head>
    9. <body>
    10. <div id="app">
    11. <!-- v-on 指令绑定事件,click指定绑定的事件类型,事件发生时调用vue中methods节点中定义的方法 -->
    12. <button v-on:click="search()">查询</button>
    13. <p>您要查询的是:{{searchMap.keyWord}}</p>
    14. <p><a v-bind:href="result.site" target="_blank">{{result.title}}</a></p>
    15. </div>
    16. <script src="vue.min.js"></script>
    17. <script>
    18. new Vue({
    19. el: '#app',
    20. data: {
    21. searchMap:{
    22. keyWord: 'wo ai beijing!!!'
    23. },
    24. //查询结果
    25. result: {}
    26. },
    27. methods:{
    28. search(){
    29. this.result = {
    30. "title":"baidu",
    31. "site":"http://www.baidu.com"
    32. }
    33. }}
    34. })
    35. </script>
    36. </body>
    37. </html>

    3.结果

     1.4 表格提交且阻止默认行为

    1.说明

         这里的 .prevent 修饰符告诉 v-on 指令对于触发的事件调用js的 event.preventDefault():即阻止表单提交的默认行为 

    2.代码

    1. <!DOCTYPE html>
    2. <html lang="en">
    3. <head>
    4. <meta charset="UTF-8">
    5. <meta name="viewport" content="width=device-width, initial-scale=1.0">
    6. <meta http-equiv="X-UA-Compatible" content="ie=edge">
    7. <title>Document</title>
    8. </head>
    9. <body>
    10. <div id="app">
    11. <!-- 修饰符用于指出一个指令应该以特殊方式绑定。
    12. 这里的 .prevent 修饰符告诉 v-on 指令对于触发的事件调用js的 event.preventDefault():
    13. 即阻止表单提交的默认行为 -->
    14. <form action="save" v-on:submit.prevent="onSubmit">
    15. <label for="username">
    16. <input type="text" id="username" v-model="user.username">
    17. <button type="submit">保存</button>
    18. </label>
    19. </form>
    20. </div>
    21. <script src="vue.min.js"></script>
    22. <script>
    23. new Vue({
    24. el: '#app',
    25. data: {
    26. user:{username:'默认值'}
    27. },
    28. methods:{
    29. onSubmit() {
    30. if (this.user.username) {
    31. alert('提交订单内容值>>>:'+this.user.username);
    32. } else {
    33. alert('请输入用户名')
    34. }
    35. }
    36. }
    37. })
    38. </script>
    39. </body>
    40. </html>

    3.页面执行

    1.5 for循环列表

    1.说明

    v-for:列表循环指令

    2.代码

    1. <!DOCTYPE html>
    2. <html lang="en">
    3. <head>
    4. <meta charset="UTF-8">
    5. <meta name="viewport" content="width=device-width, initial-scale=1.0">
    6. <meta http-equiv="X-UA-Compatible" content="ie=edge">
    7. <title>Document</title>
    8. </head>
    9. <body>
    10. <div id="app">
    11. <!-- 2、遍历数据列表 -->
    12. <table border="1">
    13. <!-- <tr v-for="item in userList"></tr> -->
    14. <tr v-for="(item, index) in userList">
    15. <td>{{index}}</td>
    16. <td>{{item.id}}</td>
    17. <td>{{item.username}}</td>
    18. <td>{{item.age}}</td>
    19. </tr>
    20. </table>
    21. </div>
    22. <script src="vue.min.js"></script>
    23. <script>
    24. new Vue({
    25. el: '#app',
    26. data: {
    27. userList: [
    28. { id: 1, username: 'helen', age: 18 },
    29. { id: 2, username: 'peter', age: 28 },
    30. { id: 3, username: 'andy', age: 38 }
    31. ]
    32. }
    33. })
    34. </script>
    35. </body>
    36. </html>

    3.效果

    1.6 if条件判断

    1.说明

    v:if条件指令:还有v-else、v-else-if 切换开销大

    2.代码

    1. <!DOCTYPE html>
    2. <html lang="en">
    3. <head>
    4. <meta charset="UTF-8">
    5. <meta name="viewport" content="width=device-width, initial-scale=1.0">
    6. <meta http-equiv="X-UA-Compatible" content="ie=edge">
    7. <title>Document</title>
    8. </head>
    9. <body>
    10. <div id="app">
    11. <input type="checkbox" v-model="permitflag">同意许可协议
    12. <!-- v:if条件指令:还有v-else、v-else-if 切换开销大 -->
    13. <h1 v-if="permitflag">if条件同意是吧.....</h1>
    14. <h1 v-else>no 不同意要....</h1>
    15. </div>
    16. <script src="vue.min.js"></script>
    17. <script>
    18. new Vue({
    19. el: '#app',
    20. data: {
    21. permitflag:true
    22. }
    23. })
    24. </script>
    25. </body>
    26. </html>

    3.效果

    二  组件

    2.1 组件 

    2.1.1 局部

    1.代码

    1. <!DOCTYPE html>
    2. <html lang="en">
    3. <head>
    4. <meta charset="UTF-8">
    5. <meta name="viewport" content="width=device-width, initial-scale=1.0">
    6. <meta http-equiv="X-UA-Compatible" content="ie=edge">
    7. <title>Document</title>
    8. </head>
    9. <body>
    10. <div id="app">
    11. <Navbar></Navbar>
    12. </div>
    13. <script src="vue.min.js"></script>
    14. <script>
    15. var app = new Vue({
    16. el: '#app',
    17. // 定义局部组件,这里可以定义多个局部组件
    18. components: {
    19. //组件的名字
    20. 'Navbar': {
    21. //组件的内容
    22. template: '
      • 首页
      • 学员管理
      '
    23. }
    24. }
    25. })
    26. </script>
    27. </body>
    28. </html>

    2.效果

    2.1.2  全局

    1.自定义js文件

    1. // 定义全局组件
    2. Vue.component('Navbar', {
    3. template: '<ul><li>首页li><li>学员管理li><li>讲师管理li>ul>'
    4. })

    2.应用

    1. <!DOCTYPE html>
    2. <html lang="en">
    3. <head>
    4. <meta charset="UTF-8">
    5. <meta name="viewport" content="width=device-width, initial-scale=1.0">
    6. <meta http-equiv="X-UA-Compatible" content="ie=edge">
    7. <title>Document</title>
    8. </head>
    9. <body>
    10. <div id="app">
    11. <Navbar></Navbar>
    12. </div>
    13. <script src="vue.min.js"></script>
    14. <script src="zidingyi.js"></script>
    15. <script>
    16. new Vue({
    17. el: '#app',
    18. data: {
    19. }
    20. })
    21. </script>
    22. </body>
    23. </html>

    3.效果

    三  生命周期

    3.1 生命周期

    1.创建时的四个事件

    2.执行中的2个事件

     3.2 案例

    1.代码

    1. <!DOCTYPE html>
    2. <html lang="en">
    3. <head>
    4. <meta charset="UTF-8">
    5. <meta name="viewport" content="width=device-width, initial-scale=1.0">
    6. <meta http-equiv="X-UA-Compatible" content="ie=edge">
    7. <title>Document</title>
    8. </head>
    9. <body>
    10. <div id="app">
    11. </div>
    12. <script src="vue.min.js"></script>
    13. <script>
    14. new Vue({
    15. el: '#app',
    16. data: {
    17. },
    18. created(){
    19. alert('初始化页面.....');
    20. },
    21. mounted(){
    22. alert('渲染染成.....');
    23. }
    24. })
    25. </script>
    26. </body>
    27. </html>

    2.页面

    四 路由

    4.1 路由的含义

     Vue.js 路由允许我们通过不同的 URL 访问不同的内容。Vue.js 路由需要载入 vue-router 库

    4.2 案例

    1代码

    1. <!DOCTYPE html>
    2. <html lang="en">
    3. <head>
    4. <meta charset="UTF-8">
    5. <meta name="viewport" content="width=device-width, initial-scale=1.0">
    6. <meta http-equiv="X-UA-Compatible" content="ie=edge">
    7. <title>Document</title>
    8. </head>
    9. <body>
    10. <div id="app">
    11. <h1>Hello App!</h1>
    12. <p>
    13. <!-- 使用 router-link 组件来导航. -->
    14. <!-- 通过传入 `to` 属性指定链接. -->
    15. <!-- <router-link> 默认会被渲染成一个 `<a>` 标签 -->
    16. <router-link to="/">首页</router-link>
    17. <router-link to="/student">会员管理</router-link>
    18. <router-link to="/teacher">讲师管理</router-link>
    19. </p>
    20. <!-- 路由出口 -->
    21. <!-- 路由匹配到的组件将渲染在这里 -->
    22. <router-view></router-view>
    23. </div>
    24. <script src="vue.min.js"></script>
    25. <script src="vue-router.min.js"></script>
    26. <script>
    27. // 1. 定义(路由)组件。
    28. // 可以从其他文件 import 进来
    29. const Welcome = { template: '
      欢迎
      '
      }
    30. const Student = { template: '
      student list
      '
      }
    31. const Teacher = { template: '
      teacher list
      '
      }
    32. // 2. 定义路由
    33. // 每个路由应该映射一个组件。
    34. const routes = [
    35. { path: '/', redirect: '/welcome' }, //设置默认指向的路径
    36. { path: '/welcome', component: Welcome },
    37. { path: '/student', component: Student },
    38. { path: '/teacher', component: Teacher }
    39. ]
    40. // 3. 创建 router 实例,然后传 `routes` 配置
    41. const router = new VueRouter({
    42. routes // (缩写)相当于 routes: routes
    43. })
    44. // 4. 创建和挂载根实例。
    45. // 从而让整个应用都有路由功能
    46. const app = new Vue({
    47. el: '#app',
    48. router
    49. })
    50. // 现在,应用已经启动了!
    51. </script>
    52. </body>
    53. </html>

    2.页面

     

  • 相关阅读:
    【操作系统】基础知识
    智云通CRM:客户说“手头紧”,如何应对才能让他下定决心购买?
    前端利用原生canvas生成图片
    【框架风格】解释器模式
    CVE-2023-3836:大华智慧园区综合管理平台任意文件上传漏洞复现
    【推搜】embedding评估 | faiss的topK向量检索
    @Async的用法和示例
    MAUI候选版本3发布啦
    第五章 将对象映射到 XML - 指定映射 XML 文档的格式选项
    PointSIFT: A SIFT-like Network Module for 3D Point Cloud Semantic Segmentation
  • 原文地址:https://blog.csdn.net/u011066470/article/details/132735058