A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

本帖最后由 谷粒姐姐 于 2018-11-16 15:58 编辑

父组件向子组件传值
  • 组件实例定义方式,注意:一定要使用props属性来定义父组件传递过来的数据
  • [AppleScript] 纯文本查看 复制代码
    <script>
        // 创建 Vue 实例,得到 ViewModel
        var vm = new Vue({
          el: '#app',
          data: {
            msg: '这是父组件中的消息'
          },
          components: {
            son: {
              template: '<h1>这是子组件 --- {{finfo}}</h1>',
              props: ['finfo']
            }
          }
        });
      </script>
  • 使用v-bind或简化指令,将数据传递到子组件中:
  • [AppleScript] 纯文本查看 复制代码
    <div id="app">
        <son :finfo="msg"></son>
      </div>
  • 子组件向父组件传值
  • 原理:父组件将方法的引用,传递到子组件内部,子组件在内部调用父组件传递过来的方法,同时把要发送给父组件的数据,在调用方法的时候当作参数传递进去;
  • 父组件将方法的引用传递给子组件,其中,getMsg是父组件中methods中定义的方法名称,func是子组件调用传递过来方法时候的方法名称
  • [AppleScript] 纯文本查看 复制代码
    <son @func="getMsg"></son>

  • 子组件内部通过this.$emit('方法名', 要传递的数据)方式,来调用父组件中的方法,同时把数据传递给父组件使用
  • [AppleScript] 纯文本查看 复制代码
     xxxxxxxxxx <div id="app">    <!-- 引用父组件 -->    <son @func="getMsg"></son>    <!-- 组件模板定义 -->    <script type="x-template" id="son">      <div>        <input type="button" value="向父组件传值" @click="sendMsg" />      </div>    </script>  </div>  <script>    // 子组件的定义方式    Vue.component('son', {      template: '#son', // 组件模板Id      methods: {        sendMsg() { // 按钮的点击事件          this.$emit('func', 'OK'); // 调用父组件传递过来的方法,同时把数据传递出去        }      }    });    // 创建 Vue 实例,得到 ViewModel    var vm = new Vue({      el: '#app',      data: {},      methods: {        getMsg(val){ // 子组件中,通过 this.$emit() 实际调用的方法,在此进行定义          alert(val);        }      }    });  </script>



评论列表案例
目标:主要练习父子组件之间传值
使用 this.$refs 来获取元素和组件
[AppleScript] 纯文本查看 复制代码
<div id="app">
    <div>
      <input type="button" value="获取元素内容" @click="getElement" />
      <!-- 使用 ref 获取元素 -->
      <h1 ref="myh1">这是一个大大的H1</h1>

      <hr>
      <!-- 使用 ref 获取子组件 -->
      <my-com ref="mycom"></my-com>
    </div>
  </div>

  <script>
    Vue.component('my-com', {
      template: '<h5>这是一个子组件</h5>',
      data() {
        return {
          name: '子组件'
        }
      }
    });

    // 创建 Vue 实例,得到 ViewModel
    var vm = new Vue({
      el: '#app',
      data: {},
      methods: {
        getElement() {
          // 通过 this.$refs 来获取元素
          console.log(this.$refs.myh1.innerText);
          // 通过 this.$refs 来获取组件
          console.log(this.$refs.mycom.name);
        }
      }
    });
  </script>

什么是路由
  • 对于普通的网站,所有的超链接都是URL地址,所有的URL地址都对应服务器上对应的资源;
  • 对于单页面应用程序来说,主要通过URL中的hash(#号)来实现不同页面之间的切换,同时,hash有一个特点:HTTP请求中不会包含hash相关的内容;所以,单页面程序中的页面跳转主要用hash实现;
  • 在单页面应用程序中,这种通过hash改变来切换页面的方式,称作前端路由(区别于后端路由);
  • 在 vue 中使用 vue-router
    • 导入 vue-router 组件类库:
    • [AppleScript] 纯文本查看 复制代码
      <!-- 1. 导入 vue-router 组件类库 -->
        <script src="./lib/vue-router-2.7.0.js"></script>
    • 使用 router-link 组件来导航
    • [AppleScript] 纯文本查看 复制代码
      <!-- 2. 使用 router-link 组件来导航 -->
      <router-link to="/login">登录</router-link>
      <router-link to="/register">注册</router-link>
    • 使用 router-view 组件来显示匹配到的组件
    • [AppleScript] 纯文本查看 复制代码
      <!-- 3. 使用 router-view 组件来显示匹配到的组件 -->
      <router-view></router-view>
    • 创建使用Vue.extend创建组件
    • [AppleScript] 纯文本查看 复制代码
      // 4.1 使用 Vue.extend 来创建登录组件
          var login = Vue.extend({
            template: '<h1>登录组件</h1>'
          });
      
          // 4.2 使用 Vue.extend 来创建注册组件
          var register = Vue.extend({
            template: '<h1>注册组件</h1>'
          });
    • 创建一个路由 router 实例,通过 routers 属性来定义路由匹配规则
    • [AppleScript] 纯文本查看 复制代码
      // 5. 创建一个路由 router 实例,通过 routers 属性来定义路由匹配规则
          var router = new VueRouter({
            routes: [
              { path: '/login', component: login },
              { path: '/register', component: register }
            ]
          });
    • 使用 router 属性来使用路由规则
    • [AppleScript] 纯文本查看 复制代码
      // 6. 创建 Vue 实例,得到 ViewModel
          var vm = new Vue({
            el: '#app',
            router: router // 使用 router 属性来使用路由规则
          });




0 个回复

您需要登录后才可以回帖 登录 | 加入黑马