vue.js 列表追加项写法

本文通过一个具体的示例展示了如何使用Vue.js框架来动态更新列表内容。示例中初始化了一个包含三个网站名称的数组,并通过Vue实例进行数据绑定显示。随后通过脚本向数组追加了多个相同的项,实时更新了列表。
<ul id="app">
  <template v-for="site in sites">
    <li>{{ site.name }}</li>
    <li>--------------</li>
  </template>
</ul>
<script>
var v=new Vue({
  el: '#app',
  data: {
    sites: [
      { name: 'Runoob' },
      { name: 'Google' },
      { name: 'Taobao' }
    ]
  }
})

v.sites.push({name: 'Taobaosss' });
v.sites.push({name: 'Taobaosss' });
v.sites.push({name: 'Taobaosss' });
v.sites.push({name: 'Taobaosss' });
v.sites.push({name: 'Taobaosss' });
v.sites.push({name: 'Taobaosss' });
 
</script>

 

转载于:https://www.cnblogs.com/dj258/p/9276737.html

<think>我们正在讨论Vue中两种创建应用的写法:1.constvm=Vue.createApp(app).mount("#app")2.constapp=Vue.createApp({})根据引用[1][3][4][5]的内容,这两种写法都是合法的,但它们在用途和后续操作上有区别。首先,引用[4]提到:“只要有constapp=Vue.createApp({,必然有mount(‘#app‘)。如果没有constapp=Vue.createApp(,则可不必有mount(’#app’)。”但这里要注意,实际上无论哪种写法,最终都需要挂载(mount)才能将应用显示出来。具体分析:写法一:`constvm=Vue.createApp(app).mount("#app")`这是链式调用,直接创建应用实例并挂载到DOM元素上,返回的是根组件实例(vm)。这种写法简洁,适用于不需要在挂载前对应用实例进行额外配置的情况。写法二:`constapp=Vue.createApp({})`这里先创建应用实例(app),但并没有立即挂载。我们可以对这个应用实例进行一些配置,比如使用`app.use()`安装插件,设置全局组件等,然后再挂载。引用[2]中给出了一个例子:constapp1=createApp({/*...*/})app1.mount('#container-1')这里就是先创建应用实例,然后进行挂载。这种写法适用于需要先配置应用然后再挂载的场景。区别总结:1.链式写法写法一)直接挂载,返回根组件实例(vm),无法再对应用实例进行全局配置(因为已经挂载了)。2.分步写法写法二)先得到应用实例(app),可以在挂载前进行各种全局配置,然后再挂载,返回的也是根组件实例(但这里我们通常用另一个变量接收挂载后的实例,如:constvm=app.mount('#app'))。适用场景:-如果不需要在挂载前对应用实例进行任何配置(比如安装插件、注册全局组件等),可以直接使用链式写法。-如果需要在挂载前对应用实例进行配置,则必须使用分步写法。引用[5]中提到,Vue的mount方法被重写,并且内部有一个重载过程,最终会调用一个标准的mount方法。无论哪种写法,最终都会执行相同的挂载逻辑。另外,引用[4]中的示例代码也是分步写法的链式调用形式(创建和挂载在同一行,但中间可以插入配置):Vue.createApp({...}).mount('#app')这种形式其实介于两者之间:它创建了应用实例,然后立即挂载,但如果在创建和挂载之间插入配置,就变成了分步写法。例如:constapp=Vue.createApp({})app.use(router)app.mount('#app')所以,更准确地说,我们讨论的两种写法实际上是:A.创建并立即挂载(链式调用,不保留应用实例引用)B.先创建应用实例(保留引用),配置后再挂载注意:在写法一中,我们用一个变量vm接收了mount的返回结果(根组件实例),而写法二中我们用一个变量app接收了应用实例。这两个变量代表不同的对象。根据引用[5]可知,mount方法返回的是根组件的实例(即proxy对象),而createApp返回的是应用实例(包含mount、use等方法)。因此,在实际开发中,我们通常这样使用:1.需要全局配置时:constapp=Vue.createApp({})//配置应用,例如:app.use(router)app.use(store)app.component('my-component',MyComponent)//然后挂载constvm=app.mount('#app')2.不需要全局配置时:constvm=Vue.createApp({}).mount('#app')另外,在Vue3中,我们还可以使用`createApp`函数创建多个应用实例,将它们挂载到不同的容器上(引用[2]),这在微前端或者局部增强的场景中非常有用。总结:-两种写法本质上是同一过程的不同阶段:创建应用实例和挂载应用实例。-链式写法(立即挂载)适用于简单场景,不需要额外配置。-分步写法(先创建后挂载)适用于需要配置应用实例(插件、全局组件等)的场景。</think>### Vue 应用创建的两种写法区别与适用场景 在 Vue 3 中,创建应用主要有以下两种写法,它们在功能实现和适用场景上有明显区别: #### 写法一:链式调用(立即挂载) ```javascript const vm = Vue.createApp(App).mount("#app") ``` **特点**: 1. **创建与挂载一步完成**:应用实例创建后立即挂载到 DOM 元素 2. **返回根组件实例**:`vm` 是根组件的实例对象(Proxy 代理对象)[^1][^5] 3. **无法追加全局配置**:挂载后不能再添加插件、全局组件等 4. **内存占用优化**:无需额外保留应用实例引用 **适用场景**: - 简单应用或不需要全局配置的场景 - 无需复用应用实例的独立组件 - 需要直接访问根组件实例的情况 ```html <!-- 示例:简单计数器应用 --> <script> const vm = Vue.createApp({ data() { return { count: 0 } }, methods: { increment() { this.count++ } } }).mount('#app') // vm 可直接访问 count 等属性 </script> ``` #### 写法二:分步创建(延迟挂载) ```javascript const app = Vue.createApp({}) // 可添加配置... app.mount('#app') ``` **特点**: 1. **分离创建与挂载**:先创建应用实例,后挂载 2. **返回应用实例**:`app` 是应用级别的实例对象 3. **支持全局配置**:挂载前可添加插件、全局组件等[^2] 4. **支持多实例**:可创建多个独立应用实例[^2] **适用场景**: - 需要全局配置的复杂应用(路由、状态管理等) - 服务端渲染(SSR)或微前端架构 - 同一页面多个独立 Vue 应用的场景 ```javascript // 示例:复杂应用配置 const app = Vue.createApp(App) // 挂载前配置 app.use(router) app.use(store) app.component('GlobalComp', GlobalComponent) // 延迟挂载 app.mount('#app') ``` #### 核心区别对比表 | **特性** | 链式调用写法 | 分步创建写法 | |-------------------|-----------------------------|-----------------------------| | 返回值类型 | 根组件实例 (Proxy) [^5] | 应用实例对象 | | 全局配置能力 | ❌ 不可添加 | ✅ 可在挂载前添加插件/组件 [^2] | | 多实例支持 | ❌ 单实例 | ✅ 支持多应用实例 [^2] | | 内存管理 | 更优(无额外引用) | 需维护应用实例引用 | | 典型应用场景 | 简单应用/组件 | 复杂应用/SSR/微前端 | #### 原理说明 1. `createApp()` 创建应用实例时,内部会初始化组件系统、指令系统等核心模块[^3] 2. `mount()` 方法执行时: - 编译模板为渲染函数 - 创建响应式数据系统 - 生成虚拟 DOM 并挂载到真实 DOM[^5] 3. 分步写法的挂载过程可被重写(如 SSR 场景)[^5] --- ###
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值