初识 Vue(04)---(组件化改造TodoList)

简介: 组件化改造TodoList原始代码 TodoList 提交 {{item}} ...

组件化改造TodoList

原始代码

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>TodoList</title>
    <script src = './vue.js'></script>
</head>
<body>
    <div id ='app'>
        <input type="text" v-model="inputValue"/>
        <button v-on:click="handleBtnClick">提交</button>
        <ul>
            <li v-for="item in list">{{item}}</li>
        </ul>  
    </div>

    <script>
        var app = new Vue({
            el: '#app',
            data:{
                list: [],
                inputValue:''
            },
            methods:{
                handleBtnClick:function(){
                    this.list.push(this.inputValue)
                    this.inputValue = ''
                }
            }
        })
    </script>
  
</body>
</html>

全局组件

Vue.component( )        创建全局组件的方法

        Vue.component("TodoItem",{
            template:"<li>todo item</li>"
        })

 创建全局组件,组件名字叫做"TodoItem", template 是模板,内容是 <li>todo item</li>。

 

使用 TodoItem 组件代替前面的 <ul><li v-for="item in list">{{item}}</li></ul> 

写成  <todo-item v-for="item in list"></todo-item>  即可

   

但无论输入什么,输出都是 todo item,为解决这个问题    

引入 v-bind  :向子组件传入绑定值;写成<todo-item v-bind:content="item" v-for="item in list"></todo-item>     

在循环 list 的时候,把 list 的每个值赋值给 item ,再将 item 以 v-bind 的形式传给 todo-item(通过 content 变量传递);

子组件接受内容: props:['content'] , 子组件可以接受到 content 的值 ,content 值是 item ,item 值是 list 的每一项 ,则

props 接收到了list 的每一项的值 ,则在 <li> 中显示出来即可 ,即 template:"<li>" + this.content + "</li>"

故将 template:"<li>" + this.content + "</li>"  改为  <li>{{content}}</li>

组件化代码(全局组件)

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>TodoList</title>
    <script src = './vue.js'></script>
</head>
<body>
    <div id ='app'>
        <input type="text" v-model="inputValue"/>
        <button v-on:click="handleBtnClick">提交</button>
        <todo-item v-bind:content="item" 
            v-for="item in list">
        </todo-item> 
    </div>

    <script>

        Vue.component("TodoItem",{
            props:['content'],
            template:"<li>{{content}}</li>"
        })

        var app = new Vue({
            el: '#app',
            data:{
                list: [],
                inputValue:''
            },
            methods:{
                handleBtnClick:function(){
                    this.list.push(this.inputValue)
                    this.inputValue = ''
                }
            }
        })
    </script>   
</body>
</html>
<todo-item v-bind:content="item" 
            v-for="item in list">
        </todo-item> 
    </div>

    <script>

        Vue.component("TodoItem",{
            props:['content'],
            template:"<li>{{content}}</li>"
        })

        var app = new Vue({
            el: '#app',
            data:{
                list: [],
                inputValue:''
            },
            methods:{
                handleBtnClick:function(){
                    this.list.push(this.inputValue)
                    this.inputValue = ''
                }
            }
        })
    </script>   
</body>
</html>

局部组件

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>TodoList</title>
    <script src = './vue.js'></script>
</head>
<body>
    <div id ='app'>
        <input type="text" v-model="inputValue"/>
        <button v-on:click="handleBtnClick">提交</button>
        <todo-item v-bind:content="item" 
            v-for="item in list">
        </todo-item> 
    </div>

    <script>
        var TodoItem = {
            props:['content'],
            template:"<li>{{content}}</li>"
        }

        var app = new Vue({
            el: '#app',
            components:{
                TodoItem:TodoItem
            },
            data:{
                list: [],
                inputValue:''
            },
            methods:{
                handleBtnClick:function(){
                    this.list.push(this.inputValue)
                    this.inputValue = ''
                }
            }
        })
    </script>   
</body>
</html>
   var TodoItem = {
            props:['content'],
            template:"<li>{{content}}</li>"
        }

        var app = new Vue({
            el: '#app',
            components:{
                TodoItem:TodoItem
            },
            data:{
                list: [],
                inputValue:''
            },
            methods:{
                handleBtnClick:function(){
                    this.list.push(this.inputValue)
                    this.inputValue = ''
                }
            }
        })
    </script>   
</body>
</html>

将 TodoItem 注册到实例之中 ,原来是 TodoItem  ,在实例中仍然是 TodoItem ,注册后再用 todo-item 即可
 

目录
相关文章
|
2天前
|
JavaScript 前端开发 UED
Vue工具和生态系统: Vue.js和服务器端渲染(SSR)有关系吗?请解释。
Vue.js是一个渐进式JavaScript框架,常用于开发单页面应用,但其首屏加载较慢影响用户体验和SEO。为解决此问题,Vue.js支持服务器端渲染(SSR),在服务器预生成HTML,加快首屏速度。Vue.js的SSR可手动实现或借助如Nuxt.js的第三方库简化流程。Nuxt.js是基于Vue.js的服务器端渲染框架,整合核心库并提供额外功能,帮助构建高效的应用,改善用户体验。
4 0
|
3天前
|
Web App开发 JavaScript 开发者
Vue工具和生态系统:什么是Vue DevTools?如何使用它?
Vue Devtools是Vue.js官方的浏览器扩展,用于简化应用调试和优化。可在Chrome和Firefox等浏览器上安装,集成到开发者工具中。安装步骤包括下载源码、npm安装、修改manifest.json并加载编译后的扩展。启用后,开发者能查看Vue组件树,检查属性,并在允许的情况下编辑data,提升开发效率。
5 0
|
3天前
|
JavaScript 测试技术
vue不同环境打包环境变量处理
vue不同环境打包环境变量处理
13 0
|
3天前
|
JavaScript
Vue Steps步骤组件用法
Vue Steps步骤组件用法
12 0
|
3天前
|
JavaScript
Vue项目使用bpmn预览流程图
Vue项目使用bpmn预览流程图
8 0
|
3天前
|
JavaScript
vue中高精度小数问题(加减乘除方法封装)处理
vue中高精度小数问题(加减乘除方法封装)处理
14 0
|
3天前
|
JavaScript
vue项目使用可选链操作符编译报错问题
vue项目使用可选链操作符编译报错问题
11 0
|
3天前
|
JavaScript
Vue项目启动报错处理
Vue项目启动报错处理
7 1
|
3天前
|
JavaScript
vue项目开发笔记记录(四)
vue项目开发笔记记录
41 0
|
3天前
|
JavaScript 定位技术
vue项目开发笔记记录(二)
vue项目开发笔记记录
49 0