11-Vue基础3

一、组件

组件 (Component) 是 Vue.js 最强大的功能之一。组件可以扩展 HTML 元素,封装可重用的代码。在较高层面上,组件是自定义元素,Vue.js 的编译器为它添加特殊功能。组件其实就是一个拥有样式、动画、js逻辑、HTML结构的综合块。

  • 如何划分组件
      - 功能模块: select、pagenation...
      - 页面区域划分: header、footer、sidebar...
    
  • data必须是函数
    通过 Vue 构造器传入的各种选项大多数都可以在组件里用。data 是一个例外,它必须是函数。

  • 单文件组件的使用方式介绍 【项目开发都会是一个文件对应一个组件】
    通过上面我们定义组件的方式,就已经感觉很不爽了,尤其是模板的定义,而且样式怎么处理也没有很好的进行规整。 Vue可以通过Webpack等第三方工具实现单文件的开发的方式。

      // Hello.vue组件
        <template>
            <h3>
                标题: {{str}}
            </h3>
        </template>
        
        <script>
            export default {
                data: function(){
                    return {
                        str: 'hello Vue!'
                    }
                }
            }
        </script>
        
        <style>
            h3{
                text-align: center;
            }
        </style>
    
    <script>
      // App.vue组件中使用Hello.vue组件
      // 导入Hello组件
      import Hello from './components/Hello';
      export default {
        // ...
        components: {  // 局部注册组件
          Hello
        }
      }
    </script>
    
    <template>
       // 使用自定义元素(Hello组件)
      <hello></hello>
    </template>
    

    通过vue-cli脚手架构造项目

  • 组件间调用 --- components
    如果要使用某个组件,单纯通过import导入是不行的,还需要通过components进行注册才能使用。

      // App.vue中
    
      // 导入组件
      import Header from './header'  
      import Footer from './footer'  
    
      new Vue({
        // 组件需要注册之后才能使用
        components:{
          Header, Footer
        }
      })
    
      // 在App.vue中
      <header></header>
      <footer></footer>
    
  • 组件间通信 --- props (父组件给子组件传参)
    组件实例的作用域是孤立的。这意味着不能 (也不应该) 在子组件的模板内直接引用父组件的数据。要让子组件使用父组件的数据,我们需要通过子组件的 props 选项。

      // header.vue 子组件
      new Vue({
        props: ['message'],  // 不同组件中的数据操作()
        methods: {
          doThis: function(){  // 子组件获取到父组件传递的参数this.message
            console.log(this.message);
          }
        }
      })
    
      // props可以其他写法
    props:{
        seller:{  // 即是设置接收参数的数据类型
          type: Object,  // 参数的类型
          // default 是设置默认值的
        }
     }
    
      // app.vue 父组件
      // 将字符串内容'hello world!'传递给子组件
      <header message='hello world!'></header>
    
      // 绑定data属性值
      // <header :message='title'></header> 
    
  • 组件间通信 --- 自定义事件(子组件给父组件传参)

      // app.vue 父组件
      
      // 自定义事件v-on: child-tell-me, 事件名为'child-tell-me'
      <component-b v-on:child-tell-me='getMsg'></component-b>
    
      new Vue({
        // ...
        methods: {
          // 'child-tell-me'对应触发的方法,即父组件获取子组件传递的参数msg
          getMsg: function(msg){  
            console.log(msg)
          }
        }
    })
    
      // footer.vue 子组件
        new Vue({
        // ...
        methods: {
          // 在sendMsg方法中,即触发'child-tell-me'方法,并传递参数
          sendMsg: function(msg){  
            this.$emit('child-tell-me', '你收到我发送的消息了吗?【componentB】')
          }
        }
    })
    

六、Vue路由

对于前端来说,其实浏览器配合超级连接就很好的实现了路由功能。但是对于单页面应用来说,浏览器和超级连接的跳转方式已经不能适用, 所以各大框架纷纷给出了单页面应用的解决路由跳转的方案。
Vue框架的兼容性非常好,可以很好的跟其他第三方的路由框架进行结合。当然官方也给出了路由的方案:vue-router; 建议还是用官方的最好,使用量也是最大,相对来说Vue框架的升级路由组件升级也会及时跟上,所以为了以后的维护和升级方便还是使用Vue自家的东西最好。

  • vue-router的安装使用
    1.CDN连接方式

    <script src="https://unpkg.com/vue-router/dist/vue-router.js"></script>
    

    2.npm 安装

    npm install vue-router
    
  • vue-router 入门

      1.引入vue和vue-router(如果配合npm和webpack的话可以直接作为一个模块导入即可)
        import VueRouter from 'vue-router'
        Vue.use(VueRouter)
      
      2.定义路由跳转的组件(或导入组件)
        var Foo = { template: '<div>foo</div>' }
        var Bar = { template: '<div>bar</div>' }
      
      
      3.定义路由规则对象
        // 每个路由path应该映射一个组件
        var routes = [
            {path: '/foo', component: Foo},
            {path: '/Bar', component: Bar}
        ];
    
      4.创建路由器对象
        // 创建 router 实例,然后传 `routes` 配置
        var router = new VueRouter({
            routes, 
            // 选中后的类名 (默认值是router-link-active)
            linkActiveClass: 'active'
        })
    
      5.创建和挂载根实例
        const app = new Vue({
            router
        }).$mount('#app');
    
      6. 模板中编写路由跳转链接
        <div id="app">
              <p>
                  <!-- 使用 router-link 组件来导航. -->
                  <!-- 通过传入 `to` 属性指定链接. -->
                  <!-- <router-link> 默认会被渲染成一个 `<a>` 标签 -->
                  <router-link to="/foo">Go to Foo</router-link>
                  <router-link to="/bar">Go to Bar</router-link>
              </p>
              <!-- 路由出口 -->
              <!-- 路由匹配到的组件将渲染在这里 -->
              <router-view></router-view>
        </div>
    
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 158,847评论 4 362
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 67,208评论 1 292
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 108,587评论 0 243
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 43,942评论 0 205
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 52,332评论 3 287
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 40,587评论 1 218
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 31,853评论 2 312
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 30,568评论 0 198
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 34,273评论 1 242
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 30,542评论 2 246
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 32,033评论 1 260
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 28,373评论 2 253
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 33,031评论 3 236
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 26,073评论 0 8
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 26,830评论 0 195
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 35,628评论 2 274
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 35,537评论 2 269

推荐阅读更多精彩内容