发表于: 2020-02-14 20:37:47

1 1037


今天完成的事情:

今天忙家里的事没有怎么学习。

组件可以扩展 HTML 元素,封装可重用的代码。
组件系统让我们可以用独立可复用的小组件来构建大型应用,几乎任意类型的应用的界面都可以抽象为一个组件树:
注册一个全局组件语法格式如下:
Vue.component(tagName, options)
tagName 为组件名,options 为配置选项。注册后,我们可以使用以下方式来调用组件:
<tagName></tagName>
全局组件
<div id="app">
    <runoob></runoob>
</div>
<script>
// 注册
Vue.component('runoob', {
  template: '<h1>自定义组件!</h1>'
})
// 创建根实例
new Vue({
  el: '#app'
})
</script>
局部组件
<div id="app">
    <runoob></runoob>
</div>
<script>
var Child = {
  template: '<h1>自定义组件!</h1>'
}
// 创建根实例
new Vue({
  el: '#app',
  components: {
    // <runoob> 将只在父模板可用
    'runoob': Child
  }
})
</script>
Prop
prop 是父组件用来传递数据的一个自定义属性。
父组件的数据需要通过 props 把数据传给子组件,子组件需要显式地用 props 选项声明 "prop":
<div id="app">
    <child message="hello!"></child>
</div>
<script>
// 注册
Vue.component('child', {
  props: ['message'],   // 声明 props
  template: '<span>{{ message }}</span>' //同样也可以在vm实例中像“this.message”这样使用
})
// 创建根实例
new Vue({
  el: '#app'
})
</script>
<blog-post 
    v-for="post in posts" 
    v-bind:key="post.id" 
    v-bind:title="post.title" 
></blog-post>
new Vue({ 
    el: '#blog-post-demo', 
    data: { 
        posts: [ 
            { id: 1, title: 'My journey with Vue' }, 
            { id: 2, title: 'Blogging with Vue' }, 
            { id: 3, title: 'Why Vue is so fun' } 
        ] 
    } 
})
动态Prop
类似于用 v-bind 绑定 HTML 特性到一个表达式,也可以用 v-bind 动态绑定 props 的值到父组件的数据中。每当父组件的数据变化时,该变化也会传导给子组件:
<div id="app">
    <div>
      <input v-model="parentMsg">
      <child v-bind:message="parentMsg"></child>
    </div>
</div>
<script>
// 注册
Vue.component('child', {
  // 声明 props
  props: ['message'],
  // 同样也可以在 vm 实例中像 “this.message” 这样使用
  template: '<span>{{ message }}</span>'
})
// 创建根实例
new Vue({
  el: '#app',
  data: {
    parentMsg: '父组件内容'
  }
})
</script>
将 v-bind 指令将 todo 传到每一个重复的组件中:
注意: prop 是单向绑定的:当父组件的属性变化时,将传导给子组件,但是不会反过来。
<div id="app">
    <ol>
    <todo-item v-for="item in sites" v-bind:todo="item"></todo-item>
    </ol>
</div>
<script>
Vue.component('todo-item', {
  props: ['todo'],
  template: '<li>{{ todo.text }}</li>'
})
new Vue({
  el: '#app',
  data: {
    sites: [
      { text: 'Runoob' },
      { text: 'Google' },
      { text: 'Taobao' }
    ]
  }
})
</script>



明天计划的事情:

props参数校验和特性、非父子组件传值、插槽、作用域插槽


收获



返回列表 返回列表
评论

    分享到