Vue纯零基础教学第三天--到走入Vue项目实际开发的内心深处

让我们手摸着手大步向前走 ,最近看完 曾国藩传,觉得很不错,还有杜月笙与孟小冬 ,推荐大家在写代码的时候,要多读书,好增加自己的文艺气息。多些对书的感悟,放心游戏,多出去走走,今天的北京 真冷 3月30日记。

侦听器实现模糊搜索

  // 侦听器,实现搜索功能异步操作
    watch: {
      // es6方法中的简写在写一次以后就不写了
      //   在search 里面 能用 nweValue 进行检索数据
      //   模糊查询 所有的接口通过json--server 给我们提供的接口
      search(newValue, oldValue) {
        axios
          .get("http://localhost:3000/brands?name_like=${newValue}")
          .then(response => {
            this.items = response.data;
          })
          .catch(err => {});
      }
    },
复制代码

VUE的核心 组件 和 路由 生命周期

组件

    组件就是页面上功能完备的区域。 结构,样式 ,js,
    组件允许我们使用小型,独立和通常可服用的组件构建大型应用,仔细想任何的应用界面
    都可以抽象为一个组件数目
    组件是可以复用的vue 实例,且带有一个名字
    模块:侧重于功能或者数据的封装
    组件:包含了template style 和 script
    组件有自己的作用域
    template 每个组件模板有且只有一个根元素
    组件中的data 要求 必须是一个函数且需要返回一个对象
复制代码

组件的分类和使用

    分类:全局注册和局部注册
    使用步骤:1、注册组件,2通过名字使用组件
复制代码

局部组件

 <script>
        // 这里不能访问 组件中的data 
        // 组件也不能访问new Vue 里面的成员
      new Vue({
        el: "#app",
        // 局部组件
        components: {
             // 组件有自己的作用域
          com: {
            // 组件就是一个vue 的实例
            // 组件的模板中应该只有一个根元素
            template: "<div><span>首页 {{msg}} </span></div>",
            data(){
                // 组件中的data 必须的一个函数,因为要让不同的实例管理自己               
                return{
                    msg:'hello',
                }
            }
            
          }
        },
        methods: {}
      });
    </script>
复制代码

全局注册组件

 // 全局组件
  Vue.component("Coma", {
    template:
      "<div><button @click='handle'>按钮</button><span>{{count}}</span></div>",
    data() {
      return {
        count: 0
      }
    },
    methods: {
      handle() {
        this.count ++;
      }
    }
  });
复制代码

父子组件

// 父组件
  Vue.component("parant-com", {
    template: "<div>父组件---使用子组件<child-com/></div>"
  });
  // 子组件
  Vue.component("child-com", {
    template: "<div>子组件</div>"
  });
复制代码

父子组件介绍 在父组件里面 要把子组件 放到里面 才能生效 <\child-com/>

props 父组件给 子组件传值 与传递不同数据

  <script>
      Vue.component("com", {
        //   props 道具 里面是传的是数组
        // 接收父组件传过来的值  把外部的值传给组件内部,这几记住穿过来的就是字符串
        props: ["leve1", "leve2"],
        //  这里要绑定变量 所以 我们要绑定
        // prop 传递数字,布尔值,数组对象,单向数据流所有prop 向下传输
        template: "<div><span>{{leve1}}</span>-----<span>{{leve2}}</span></div>",
        mounted(){
            console.log(this.leve1)
        }
      });

      new Vue({
        el: "#app",
        data: {
            // leve1:1
            // leve1:true
            // 这个prop 用来传递 一个初始值,那这个子组件接下来希望将其作为本地的prop数据
            // 来使用这种情况下最后定义一个本地的data属性将这个prop 用作初始值
            leve1:{name:'首页'}
        },
        methods: {}
      });
    </script>
复制代码

生命周期 钩子函数 讲解 重点 *****

生命周期 -----从生到死 生命周期 钩子函数

beforeCreate  刚刚创建实例
created      init 注入  调用
   往下走 设置 el
   继续走 设置 template 模板
  然后在设置与没有设置el 与 模板  中 做出选择

  beforeMount 没有挂载 时候可以进行干预
  mounted     编译好的模板替换到 el 挂载页面上页面加载完毕
  
beforeUpdate  数据更新一变化 执行函数更新
updated        更新完毕渲染

beforeDestroy  开始销毁 监听器 事件
destroy       销毁完成 
复制代码

使用$mount

使用render 传递 组件传值

钩子函数运行原理与机制

<body>
    <div id="app">
      <input ref="txt" type="text" v-model="something" />
    </div>
    <script src="https://cdn.jsdelivr.net/npm/vue"></script>
    <script src="./node_modules/axios/dist/axios.js"></script>
    <script>
      var vm = new Vue({
        el: "#app",
        data: {
          msg: "hello VUe",
          something: ""
        },
        //    钩子函数 beforecreate 在页面创建好就执行了
        beforeCreate() {
          console.log("beforeCreate", this.msg);
        },
        // 可以获取到data 或者methods 中的成员
        created() {
          console.log("created", this.msg);
        },
        // 当vue 实例 的el 节点或组件挂载到页面以前运行此函数
        beforeMount() {
          console.log("beforeMount", this.$refs.txt);
        },
        // 当vue 实例el 节点或组件挂载到页面以后运行此函数
        mounted() {
          console.log("mounted", this.$refs.txt);
        },
        // 当vue 实例数据 发生改变时触发此函数
        beforeUpdate() {
          console.log("moubeforeUpdatented");
        },
        // 当vue 实例数据 发生改变后触发此函数
        updated() {
          console.log("updated");
        },
        // vue 实例销毁之前触发
        beforeDestroy() {
          console.log("beforeDestroy");
        },
        // vue 实例销毁
        destroyed() {
          console.log("destroyed");
        }
      });
    </script>
  </body>
复制代码

前端路由 单页应用

单页应用,是在一个页面完成所有的业务功能,浏览器一开始会加重必须的HTML css 和 javaSCRIPT 之后操作这张页面完成 一切都是 js 来控制

优点:
    操作体验流程
    完全的前端组件化
缺点:
    首次加载大量资源
    对搜索引擎不友好
    开发难度相对较高
复制代码

单页应用实现的原理 前端路由 DEMO

hash 路由
谨记:前端路由是通过锚点来识别的
复制代码

<body>
    <div id="app">
      <ul>
        <li>
          <a href="#/users">用户管理</a>
        </li>
        <li>
          <a href="#/rights">权限管理</a>
        </li>
        <li>
          <a href="#/roles">角色管理</a>
        </li>
      </ul>
    </div>
    <div id="container"></div>
    <script>
      // 当锚点发生变化
      window.onhashchange = function() {
        //   获取锚点
        var hash = location.hash;
        hash = hash.replace("#", "");
        // 把锚点当成路径来判断
        var container = document.getElementById("container");
        switch (hash) {
          case "/users":
            container.innerHTML = "这里是用户管理";
            
            <!--这里记得使用break 啊不然有穿透效果的 -->
            
            break;
          case "/rights":
            container.innerHTML = "这里是权限管理";
            break;
          case "/roles":
            container.innerHTML = "这里是角色管理";
            break;
        }
      };
    </script>
  </body>
复制代码

router-view

        <!DOCTYPE html>
<html lang="en">
  <head>
    <meta charset="UTF-8" />
    <meta name="viewport" content="width=device-width, initial-scale=1.0" />
    <meta http-equiv="X-UA-Compatible" content="ie=edge" />
    <title>Document</title>
  </head>

  <body>
    <div id="app">
      <ul>
        <li>
          <a href="#/users">用户管理</a>
        </li>
        <li>
          <a href="#/rights">权限管理</a>
        </li>
        <li>
          <a href="#/roles">角色管理</a>
        </li>
      </ul>

  <!-- 给路由匹配到的组件占位  -->
  <router-view></router-view>
</div>
<script src="vue.js"></script>
<script src="vue-router.js"></script>
<!-- 上面是 vue-router 全局引用 -->
<script src="./node_modules/axios/dist/axios.js"></script>
<script>
  /*
    vue-router  会全局 范围内使用vue 自动调用vue.use注册 vue-router  插件
    1、创建路由组件
    2、创建路由对象(设置路由规则) router 路由规则 里面包含 route 路由规则
    3、创建vue 实例配置路由对象
   */
  var users = {
    template: "<div>用户管理的额组件</div>"
  };
  var rights = {
    template: "<div>创建路由权限</div>"
  };
  var roles = {
    template: "<div>创建路由角色</div>"
  };

  var router = new VueRouter({
    // 设置路由规则
    routes: [
    <!-- 这里使用 redirect  进行重定向  -->
      {path:'/',redirect:'/users'}
      { path: "/users", component: users },
      { path: "/rights", component: rights },
      { path: "roles", component: roles }
    ]
  });

  var vm = new Vue({
    el: "#app",
    router
  });
    </script>
  </body>
</html>
    <!-- 
    vue- router 是官方的路由管理器,让构建单页应用易如反掌官网说的
     下载 router npm install vue-router
    
     然后需要导入  在模块化工程中使用它
     import Vue from 'vue'
     import VueRouter from 'vue-router'
    
     Vue.use(VUERouter)
     -->
复制代码

转载于:https://juejin.im/post/5c9f7469e51d451bb931da49

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值