老杜Vue2+3 (61 ~ 62) 组件

本文介绍了Vue中的组件和组件化概念,包括如何定义和使用组件,以及局部和全局注册组件的方法。通过实例展示了在HTML中创建和使用组件的步骤,强调了组件化在提高代码组织和维护性方面的优势。

前言

本文章记录,跟b站动力节点 老杜视频学Vue 的笔记

一、什么是组件和组件化

组件:是构建用户界面的可复用和独立的模块。可以将组件看作是一种自定义的 HTML 元素,它可以包含自己的模板、样式和逻辑。

组件化:是指将一个复杂的应用程序或页面拆分成多个小组件的过程。每个组件都有自己的职责和功能,并可以相互配合形成完整的应用程序。通过将应用程序拆分为多个组件,可以提高代码的可维护性、复用性和可测试性。

在 Vue 中,可以使用 Vue.component() 函数创建组件,并在其他组件或应用程序中引用和使用它们。每个组件可以有自己的数据、方法、生命周期钩子等。组件可以通过 props 接收父组件传递的数据,并通过事件向父组件发送消息。

组件化使得开发人员能够更好地组织和管理代码,减少了代码的重复性,同时也提供了更灵活、可扩展的开发方式,以及更好的分工协作能力。在复杂的应用程序中,组件化可以帮助我们快速开发、维护和优化代码。

第一个组件

注意事项如下图:

在这里插入图片描述

编写组件可分为以下三步骤:
第一步:在标签script中定义组件变量 const myComponent = Vue.extend({ template:·编写需要的标签·
data(){
return obj // 这里返回的的值是一个对象,类似new Vue 中的data 配置项
}
})
第二步:在vm对象中注册对象(这里先局部注册),需要用到新的配置项components:{组件名:组件变量,
}
第三步:使用自己注册的组件,在body中需要的地方使用自己定义的组件名,以标签的形式使用即可

具体案例代码:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>第一个组件</title>
    <script src="../../js/vue.js"></script>
</head>
<body>
    <div id="mydiv">
        <h1>{{msg}}</h1>
        <objli></objli>
    </div>
    
    <script>
        const myComponent =Vue.extend({
            template:`
            <ul>
                <li v-for="(obj,index) in objs" :key="obj.age">
                {{obj.name}},{{index}}
                </li>
            </ul>
            `,
            data(){
                return {
                    objs: [
                        {'name':'cyh','age':23},
                        {'name':'chh','age':22},
                        {'name':'cyy','age':21}
                    ]
                }
            }
        })

        const vm =new Vue({
            el: '#mydiv',
            data:{
               msg:"第一个组件",
            },
            // 局部注册
            components:{
                objli : myComponent,
            }
        })
    </script>
</body>
</html>

第二个组件(全局注册)

细节:
1.Vue.extend()可以省略
2.组件的名字
第一种;全部小写
第二种:首字母大写,后面都是小写
第三种: kebab-case命 名法(串式命名法。例如: user- login)
第四种: CamelCase命 名法(驼峰式命名法。例如: UserLogin) ,但是这种方式只允许在脚手架环境中使用。
3.注册全局组件的方法:Vue.component(“组件名”,组件变量)

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>熟练测试组件的写法</title>
    <script src="../../js/vue.js"></script>
</head>
<body>
    <div id="mydiv">
        <h1>{{msg}}</h1>
        <persons_li></persons_li>
        
    </div>
    
    <script>
        const MyComponent = {
            template:`
            <ul>
            <li v-for="(value,index) in persons" :key="value.id">
                {{value.name}}
            </li>
            </ul>
            `,
            data(){
                return {
                    persons:[{'id':2021,'name':'cyh'},{'id':2022,'name':'cyh2'}]
                }
            }

        }
        Vue.component("persons_li",MyComponent)
        const vm =new Vue({
            el: '#mydiv',
            data:{
               msg:"熟练测试组件的写法",
            },
        })
    </script>
</body>
</html>
pod install报错:Analyzing dependencies Inspecting targets to integrate CDN: trunk Relative path: CocoaPods-version.yml exists! Returning local because checking is only performed in repo update ――― MARKDOWN TEMPLATE ――――――――――――――――――――――――――――――――――――――――――――――――――――――――――― ### Command ``` /Users/huang/.rbenv/versions/3.3.0/bin/pod install --verbose ``` ### Report * What did you do? * What did you expect to happen? * What happened instead? ### Stack ``` CocoaPods : 1.15.2 Ruby : ruby 3.3.0 (2023-12-25 revision 5124f9ac75) [x86_64-darwin23] RubyGems : 3.5.3 Host : macOS 15.0.1 (24A348) Xcode : 16.0 (16A242d) Git : git version 2.39.5 (Apple Git-154) Ruby lib dir : /Users/huang/.rbenv/versions/3.3.0/lib Repositories : trunk - CDN - https://cdn.cocoapods.org/ ``` ### Plugins ``` cocoapods-deintegrate : 1.0.5 cocoapods-plugins : 1.0.0 cocoapods-search : 1.0.1 cocoapods-trunk : 1.6.0 cocoapods-try : 1.2.0 ``` ### Podfile ```ruby # Uncomment this line to define a global platform for your project # platform :ios, '14.0' target 'HXGPSLibrary' do use_frameworks! # 添加GZIP pod 'GZIP', '~> 1.3.0' target 'HXGPSLibraryTests' do inherit! :search_paths end end ``` ### Error ``` RuntimeError - `PBXGroup` attempted to initialize an object with unknown ISA `PBXFileSystemSynchronizedRootGroup` from attributes: `{"isa"=>"PBXFileSystemSynchronizedRootGroup", "exceptions"=>["63B920102E862DCC00404248"], "path"=>"HXGPSLibrary", "sourceTree"=>"<group>"}` If this ISA was generated by Xcode please file an issue: https://github.com/CocoaPods/Xcodeproj/issues/new /Users/huang/.rbenv/versions/3.3.0/lib/ruby/gems/3.3.0/gems/xcodeproj-1.25.0/lib/xcodeproj/project/object.rb:359:in `rescue in object_with_uuid' /Users/huang/.rbenv/versions/3.3.0/lib/ruby/gems/3.3.0/gems/xcodeproj-1.25.0/lib/xcodeproj/project/object.rb:349:in `object_with_uuid' /Users/huang/.rbenv/versions/3.3.0/lib/ruby/gems/3.3.0/gems/xcodeproj-1.25.0/lib/xcodeproj/project/object.rb:300:in `block (2 levels) in configure_with_plist' /Users/huang/.rbenv/versions/3.3.0/lib/ruby/gems/3.3.0/gems/xcodeproj-1.25.0/lib/xcodeproj/project/object.rb:299:in `each' /Users/huang/.rbenv/versions/3.3.0/lib/ruby/gems/3.3.0/gems/xcodeproj-1.25.0/lib/xcodeproj/project/object.rb:299:in `block in configure_with_plist' /Users/huang/.rbenv/versions/3.3.0/lib/ruby/gems/3.3.0/gems/xcodeproj-1.25.0/lib/xcodeproj/project/object.rb:296:in `each' /Users/huang/.rbenv/versions/3.3.0/lib/ruby/gems/3.3.0/gems/xcodeproj-1.25.0/lib/xcodeproj/project/object.rb:296:in `configure_with_plist' /Users/huang/.rbenv/versions/3.3.0/lib/ruby/gems/3.3.0/gems/xcodeproj-1.25.0/lib/xcodeproj/project.rb:272:in `new_from_plist' /Users/huang/.rbenv/versions/3.3.0/lib/ruby/gems/3.3.0/gems/xcodeproj-1.25.0/lib/xcodeproj/project/object.rb:350:in `object_with_uuid' /Users/huang/.rbenv/versions/3.3.0/lib/ruby/gems/3.3.0/gems/xcodeproj-1.25.0/lib/xcodeproj/project/object.rb:290:in `block in configure_with_plist' /Users/huang/.rbenv/versions/3.3.0/lib/ruby/gems/3.3.0/gems/xcodeproj-1.25.0/lib/xcodeproj/project/object.rb:287:in `each' /Users/huang/.rbenv/versions/3.3.0/lib/ruby/gems/3.3.0/gems/xcodeproj-1.25.0/lib/xcodeproj/project/object.rb:287:in `configure_with_plist' /Users/huang/.rbenv/versions/3.3.0/lib/ruby/gems/3.3.0/gems/xcodeproj-1.25.0/lib/xcodeproj/project.rb:272:in `new_from_plist' /Users/huang/.rbenv/versions/3.3.0/lib/ruby/gems/3.3.0/gems/xcodeproj-1.25.0/lib/xcodeproj/project.rb:213:in `initialize_from_file' /Users/huang/.rbenv/versions/3.3.0/lib/ruby/gems/3.3.0/gems/xcodeproj-1.25.0/lib/xcodeproj/project.rb:113:in `open' /Users/huang/.rbenv/versions/3.3.0/lib/ruby/gems/3.3.0/gems/cocoapods-1.15.2/lib/cocoapods/installer/analyzer.rb:1194:in `block (2 levels) in inspect_targets_to_integrate' /Users/huang/.rbenv/versions/3.3.0/lib/ruby/gems/3.3.0/gems/cocoapods-1.15.2/lib/cocoapods/installer/analyzer.rb:1193:in `each' /Users/huang/.rbenv/versions/3.3.0/lib/ruby/gems/3.3.0/gems/cocoapods-1.15.2/lib/cocoapods/installer/analyzer.rb:1193:in `block in inspect_targets_to_integrate' /Users/huang/.rbenv/versions/3.3.0/lib/ruby/gems/3.3.0/gems/cocoapods-1.15.2/lib/cocoapods/user_interface.rb:64:in `section' /Users/huang/.rbenv/versions/3.3.0/lib/ruby/gems/3.3.0/gems/cocoapods-1.15.2/lib/cocoapods/installer/analyzer.rb:1188:in `inspect_targets_to_integrate' /Users/huang/.rbenv/versions/3.3.0/lib/ruby/gems/3.3.0/gems/cocoapods-1.15.2/lib/cocoapods/installer/analyzer.rb:107:in `analyze' /Users/huang/.rbenv/versions/3.3.0/lib/ruby/gems/3.3.0/gems/cocoapods-1.15.2/lib/cocoapods/installer.rb:422:in `analyze' /Users/huang/.rbenv/versions/3.3.0/lib/ruby/gems/3.3.0/gems/cocoapods-1.15.2/lib/cocoapods/installer.rb:244:in `block in resolve_dependencies' /Users/huang/.rbenv/versions/3.3.0/lib/ruby/gems/3.3.0/gems/cocoapods-1.15.2/lib/cocoapods/user_interface.rb:64:in `section' /Users/huang/.rbenv/versions/3.3.0/lib/ruby/gems/3.3.0/gems/cocoapods-1.15.2/lib/cocoapods/installer.rb:243:in `resolve_dependencies' /Users/huang/.rbenv/versions/3.3.0/lib/ruby/gems/3.3.0/gems/cocoapods-1.15.2/lib/cocoapods/installer.rb:162:in `install!' /Users/huang/.rbenv/versions/3.3.0/lib/ruby/gems/3.3.0/gems/cocoapods-1.15.2/lib/cocoapods/command/install.rb:52:in `run' /Users/huang/.rbenv/versions/3.3.0/lib/ruby/gems/3.3.0/gems/claide-1.1.0/lib/claide/command.rb:334:in `run' /Users/huang/.rbenv/versions/3.3.0/lib/ruby/gems/3.3.0/gems/cocoapods-1.15.2/lib/cocoapods/command.rb:52:in `run' /Users/huang/.rbenv/versions/3.3.0/lib/ruby/gems/3.3.0/gems/cocoapods-1.15.2/bin/pod:55:in `<top (required)>' /Users/huang/.rbenv/versions/3.3.0/bin/pod:25:in `load' /Users/huang/.rbenv/versions/3.3.0/bin/pod:25:in `<main>' ``` ――― TEMPLATE END ―――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――― [!] Oh no, an error occurred. Search for existing GitHub issues similar to yours: https://github.com/CocoaPods/CocoaPods/search?q=%60PBXGroup%60+attempted+to+initialize+an+object+with+unknown+ISA+%60PBXFileSystemSynchronizedRootGroup%60+from+attributes%3A+%60%7B%22isa%22%3D%3E%22PBXFileSystemSynchronizedRootGroup%22%2C+%22exceptions%22%3D%3E%5B%2263B920102E862DCC00404248%22%5D%2C+%22path%22%3D%3E%22HXGPSLibrary%22%2C+%22sourceTree%22%3D%3E%22%3Cgroup%3E%22%7D%60%0AIf+this+ISA+was+generated+by+Xcode+please+file+an+issue%3A+https%3A%2F%2Fgithub.com%2FCocoaPods%2FXcodeproj%2Fissues%2Fnew&type=Issues If none exists, create a ticket, with the template displayed above, on: https://github.com/CocoaPods/CocoaPods/issues/new Be sure to first read the contributing guide for details on how to properly submit a ticket: https://github.com/CocoaPods/CocoaPods/blob/master/CONTRIBUTING.md Don't forget to anonymize any private data! Looking for related issues on cocoapods/cocoapods... Searching for inspections failed: undefined method `map' for nil
09-27
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值