• Vue-基础(二)


    一,Vue中的组件化开发:

      Vue中的组件也就是Vue实例

      组件类型:

        通用组件(例如,表单,弹窗,布局类等)

        业务组件(抽奖,机器分类)

        页面组件(单页面开发程序的每个页面都是一个组件)

      组件开发三部曲:声明,注册,使用

    二.slot插槽和 ref .$parent

      1.插槽slot

        slot就是子组件里给DOM留下来的坑位,可以理解为动态的DOM

        例如

      2.ref获取子组件实例

        -在子组件上使用属性ref="xxx"

        -获取this.$refs.xxx获取元素,

       3.$parent 可以在子组件中获取父组件的实例

    三.父子组件的通信

      父传子:

        父用子的时候通过属性传递,

        子要声明props:[属性名]来接收

        收到了就是自己的了,随便你用

        <script type="text/javascript">
            //子组件定义好了props直接用
            var Child={
                template:`
                    <div>
                    我是子组件{{sendchild}}
                    <button @click='sendparent'>我要反馈东西给父亲</button>
                    </div>
                `,
           //通过props属性来接收父组件传递过来的信息 props:[
    'sendchild'], methods:{ sendparent(){ this.$emit('baba','这是儿子组件给你的') } } } //父组件通过属性sendchild传递了数据给子组件 var Parent={ template:` <div> 我是父组件{{ msg }}
             //通过属性去传递
    <child sendchild='父亲给你的' @baba='reserve'></child> </div> `, components:{ Child }, data(){ return { msg:'' } }, methods:{ reserve(val){ this.msg=val } } }

      子传父

        -子组件里面通过$emit('自定义事件名',变量1,变量2)触发

        -父组件@自定义事件名='事件名'监听

        -子组件方法里, this.$emit('sendfather',value1,value2)触发自定义事件

        -父组件里 <child @sendfather='mymethods'></child>

    <script type="text/javascript">
            //子组件定义好了props直接用
            var Child={
                template:`
                    <div>
                    我是子组件{{sendchild}}
                    <button @click='sendparent'>我要反馈东西给父亲</button>
                    </div>
                `,
                props:['sendchild'],
                methods:{
                    sendparent(){
                //传递baba事件
    this.$emit('baba','这是儿子组件给你的') } } } //父组件通过属性sendchild传递了数据给子组件 var Parent={ template:` <div> 我是父组件{{ msg }}
              //监听baba事件
    <child sendchild='父亲给你的' @baba='reserve'></child> </div> `, components:{ Child }, data(){ return { msg:'' } }, methods:{ reserve(val){ this.msg=val } } }

    四,非父子组件之间的传参

        Vue.prototype.$bus=new Vue()//在vue上面挂载一个$bus作为中央处理组件
        this.$bus.$emit('自定义事件名','传递的数据')//触发自定义事件传递数据
        this.$bus.$on('自定义事件名',fn)//监听自定义事件获取数据
            Vue.prototype.$bus=new Vue()
            var MyHeader={
                template:`
                    <div>
                    我是头部
                    {{ headermsg }}
                    </div>
                `,
                data(){
                    return {
                        headermsg:'我是头部的信息'
                    }
                },
                created(){
              
    // var self=this // self.$bus.$on('sending',function(val){ // self.headermsg=val // })
             //ES6中的箭头函数会改变this的指向,指向外部属性的this.这里就是指向created属性的this this.$bus.$on('sending',val=>{ this.headermsg=val }) } } var MyBody={ template:` <div>我是身体</div> `, } var MyFooter={ template:` <div>我是底部<button @click='sendhead'>我要跟头部通信</button></div> `, methods:{ sendhead(){
                //在另一个组件中使用this.$bus.$on同样的也是监听sending事件
    this.$bus.$emit('sending','我是底部的数据') } } } new Vue({ el:'#app', components:{ MyHeader, MyBody, MyFooter }, template:` <div> <my-header></my-header><hr> <my-body></my-body><hr> <my-footer></my-footer> </div> `, data(){ return {} }, })

    五.Vue中的路由跳转的原理(哈希模式)

      单页面应用的路由模式有两种

      1.哈希模式((利用hashchange 事件监听 url的hash 的改变))

      2.history模式(使用此模式需要后台配合把接口都打到我们打包后的index.html)

        <script type="text/javascript">
            var appdiv=document.getElementById('app')
    
            window.addEventListener('hashchange', function(e) {
                  console.log(location.hash)
                  switch(location.hash){
                      case '#/login':
                      appdiv.innerHTML='我是登录页面';
                      break;
                      case '#/register':
                      appdiv.innerHTML='我是注册页面';
                      break;
                  }
                })
        </script>

      3.安装路由    

        1:下载 npm i vue-router -S
        2:安装插件Vue.use(VueRouter);
        3:创建路由对象 var router = new VueRouter();
        4:配置路由规则 router.addRoutes([路由对象]);
          路由对象{path:'锚点值',component:要(填坑)显示的组件}
        5:将配置好的路由对象交给Vue
        在options中传递-> key叫做 router
          window.addEventListener('hashchange', function(e) {
            console.log(e)})
        6:留坑(使用组件) <router-view></router-view>

        <script type="text/javascript" src="vue.js"></script>
        <!-- 引入路由插件 -->
        <script type="text/javascript" src="vue-router.js"></script>
        <script type="text/javascript">
            var Login={
                template:`
                    <div>我是登录页面</div>
                `,
            }
            //安装路由插件
            Vue.use(VueRouter);
            //创建路由对象
            var router= new VueRouter({
                //配置路由对象
                routes:[
                    {path:'/login',name:'login',component:Login}
                ]
            })
            new Vue({
                el:'#app',
                router,
                template:`
                    <div>
                        <p>请在链接上加上login测试路由功能</p>
                        <router-view></router-view>
                    </div>
                `,
                data(){
                    return {}
                },
            })
        </script>
  • 相关阅读:
    屏蔽鼠标右键/F1帮助
    vs2010如何连接到mysql数据库
    经典的数据库设计贴吧
    js子窗口刷新父窗口
    数据库三大范式
    写给毕业生
    SQL Server权限数据库设计
    .NET
    ASP.NET MVC框架(第一部分) 【转】
    什么是SQL注入法攻击 .
  • 原文地址:https://www.cnblogs.com/july-sunny/p/11744179.html
Copyright © 2020-2023  润新知