Vue之处理边界情况

Vue2(18) 处理边界情况学习笔记 内联模板内联模板允许在组件标签内定义模板内容,但会使模板作用域变得难以理解,因此应尽量避免使用。</</</X-Template另一种定义模板的方式是在<script>元素中使用类型。X</</处理Vue中的边界情况是确保应用稳定运行和高效开发的关键。通过合理使用Vue提供的各种功能和机制,并结合示例代码进行实践,我们可以有效地解决这些边界情况,从而提高应用的质量和可维护性。 阅读详情

处理边界情况

All the features on this page document the handling of edge cases,meaning unusual situations that sometimes require bending Vue’s rules a little. Note however, that they all have disadvantages or situations where they could be dangerous.

特殊情况下的处理方式,有利有弊

1. 访问元素&组件

1.1 访问根实例(Accessing the Root Instance )

通过 this.$root 根实例

 // The root Vue instance
new Vue({
  data: {
    foo: 1
  },
  created:function(){
    
    // 【获取根组件的数据】
    console.log(this.$root.foo); 
    
    // 【写入根组件的数据】
    this.$root.foo = 2

    // 【访问根组件的计算属性】
    this.$root.bar;
  },
  computed: {
    bar: function () {
      alert('我是计算属性bar,只要有人访问我或者改变我的值,我就执行')
    }
  },
  methods: {
    baz: function () {
      alert('baz')
    }
  }
})

这种适合小型代码量时使用,中大型项目还是推荐用 Vuex来管理应用的状态:如下

用根实例获取状态 VS 用Vuex管理状态
在这里插入图片描述
完整代码

1.2 访问父组件实例

Similar to $root, the $parent property can be used to access the parent instance from a child.
This can be tempting to reach for as a lazy alternative to passing data with a prop.

父组件通过prop向子组件传值,子组件也可通过$parent访问父组件的值

1.3 访问子组件或子元素

通过$refs访问子组件,注意: $refs 只会在组件渲染完成之后生效。

<div id="app">
    <base-input ref="usernameInput"></base-input>
</div>

<script>
    Vue.component("base-input", {
        template: "<input type='input' ref='input'>",
        methods: {
            popUp() {
                alert(11)
            },
            focus: function () {
                this.$refs.input.focus()
            }
        }
    });

    new Vue({
        el: "#app",
        data: {},
        mounted: function () {
            this.$refs.usernameInput.popUp();
            this.$refs.usernameInput.focus();
        }
    });
</script>

完整代码

1.4 依赖注入

In fact, you can think of dependency injection as sort of “long-range props”

使用props是父组件向子组件共享数据
而使用依赖注入是父组件向所有的子孙组件共享数据(可跨层级的分享数据)
使用方法:

// 父组件中抛出要分享的数据
provide: function () {
  return {
    getMap: this.getMap
  }
}

// 在子组件中注入一下就可以用了,so easy!
inject: ['getMap']

2. 程序化的事件监听(Programmatic Event Listeners )

  • Listen for an event with $on(eventName, eventHandler)
  • Listen for an event only once with $once(eventName, eventHandler)
  • Stop listening for an event with $off(eventName, eventHandler)

当你需要在一个组件实例上手动侦听事件时,它们是派得上用场的

<div id="app">
    <input ref="dateInput" v-model="date" type="text" />
</div>

<script>
    new Vue({
        el: "#app",
        data: {
            date: null
        },
        mounted: function() {
            var picker = new Pikaday({
                field: this.$refs.dateInput,
                format: "YYYY-MM-DD"
            });

            this.$once("hook:beforeDestroy", function() {
                picker.destroy();
            });
        }
    });
</script>

完整代码

3. 循环引用

3.1 递归组件

Components can recursively invoke themselves in their own template. However, they can only do so with the name option

组件可以在自身模板中调用自己,注意:不要陷入无限循环

<div id="app">
    <base-input></base-input>
</div>

<script>
   
    Vue.component("base-input", {
        name: 'stack-overflow',
        template: '<div><stack-overflow></stack-overflow></div>'   // 无限循环:报错:Maximum call stack size exceeded
    });

    new Vue({
        el: "#app",
        data: {}
    });
</script>

3.2 组件之间的循环引用

常见场景:渲染多层级结构时会用到

4. 定义模板的另外两种方式

4.1 Inline Template

这种方式会放模板的作用域容易混淆,不推荐,还是推荐用组件中的 template 选项或者.vue文件中的元素

<my-component inline-template>
  <div>
    <p>These are compiled as the component's own template.</p>
    <p>Not parent's transclusion content.</p>
  </div>
</my-component>

4.2 X-Template

这个有点像mustuche模板的用法

<script type="text/x-template" id="hello-world-template">
  <p>Hello hello hello</p>
</script>

Vue.component('hello-world', {
  template: '#hello-world-template'
})

5. 控制更新(Controlling Updates)

5.1 强制更新

If you find yourself needing to force an update in Vue, in 99.99% of cases, you’ve made a mistake somewhere.

使用 $forceUpdate 强制更新,注意:需要强制更新的情况极少,99%可能性是你哪边出错了

5.2 通过 v-once 创建低开销的静态组件

要渲染的静态内容很多,明显影响了渲染性能时可以用,一般不要用。

Vue.component('terms-of-service', {
  template: `
    <div v-once>
      <h1>Terms of Service</h1>
      ... a lot of static content ...
    </div>
  `
})

更多Vue文档解读:《Vue Doc 笔记》

Vue技术中处理边界情况的X-template 在Vue中,我们可以使用X-template来定义组件的模板,以实现可重用、可维护的代码。本文将介绍如何使用Vue的X-template来处理边界情况,同时提供相应的源代码示例。Vue的X-template是一种特殊的语法,它允许我们在Vue组件中定义模板,而不是将模板直接写在HTML中。通过使用条件渲染、列表渲染和表单处理等技术,我们可以更灵活地处理各种边界情况,并构建出更强大的Web应用程序。在上面的示例中,我们使用了v-if指令来根据showTitle的值来决定是否显示标题。// 处理表单提交逻辑。 阅读详情

相关推荐

CloudCompare里那个CSF地面滤波插件,到底怎么用?手把手教你分离点云里的地面

本文详细介绍了如何在CloudCompare中使用CSF地面滤波插件分离点云中的地面数据。通过解析布料模拟滤波算法的核心参数,如布料刚度和网格分辨率,并提供不同地形(城市、丘陵、山地)的适配策略,帮助用户高效处理复杂点云数据。文章还包含实战案例和优化技巧,确保滤波结果的精度和可靠性。

weixin_42548708的博客 221

Vue学习笔记——10.边界情况

1.访问根实例 在每个 new Vue 实例的子组件中,其根实例可以通过 $root property 进行访问。例如,在这个根实例中: <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Title</title> <script src="https://lib.baomitu.com/vue/2.6.11/vue.

XHY的博客 498

VS2022 LNK1168无法打开进行写入 解决办法

C语言编程---VS---错误和警告---链接器工具错误---LNK1168--无法打开进行写入

weixin_67166415的博客 7162

Vue处理边界情况

处理边界情况访问元素 & 组件访问根实例访问父级组件实例访问子组件实例或子元素依赖注入程序化的事件侦听器循环引用递归组件组件之间的循环引用模板定义的替代品内联模板X-Template控制更新强制更新通过 v-once 创建低开销的静态组件 访问元素 & 组件   在绝大多数情况下,我们最好不要触达另一个组件实例内部或手动操作 DOM 元素。不过在一些情况下做这些事情也确实是合适的。...

JustinNeil的博客 1325

SPSS中的数据分析—信度效度检验【1】

前一段时间跟大家分享了好几篇关于EXCEL方面的数据分析知识,不知道大家都掌握得怎么样了。今天咱们换个口味,给大家讲一下关于SPSS中的数据分析——信度效度检验。 现阶段正处在毕业季阶段,很多同学可能都正在忙着去弄自己的论文和答辩(不知道大家在翟天临上热搜这个事情上有没有做出过一定贡献),很多时候我们在写论文答辩甚至于其他课题研究的时候都会选择用问卷这种形式来收集数据。最后我们只需要针对问卷所取...

小白数据营的博客 6万+

COMSOL+AI实战:5个超实用技巧让你的仿真效率翻倍(附Python代码)

本文详细介绍了如何将人工智能(AI)与COMSOL仿真软件结合,通过Python脚本实现五大实用技巧,包括自动化生成数据集、构建代理模型、集成AI优化算法、利用神经网络加速场量求解以及智能结果分析,从而显著提升多物理场仿真的效率和自动化水平。

weixin_29230865的博客 443

VUE组件学习(依赖注入)

访问VUE根实例 1.在每个 new Vue 实例的子组件中,其根实例可以通过 $root 属性进行访问。例如,在这个根实例中 2.$parent 属性可以用来从一个子组件访问父组件的实例。它提供了一种机会,可以在后期随时触达父级组件,以替代将数据以 prop 的方式传入子组件的方式。 注意 在绝大多数情况下,触达父级组件会使得你的应用更难调试和理解,尤其是当你变更了父级组件的数据的时候。...

qq_14897069的博客 1621

AgentScope Java 2.0 项目实战: 从零构建自己的个人AI助手“小龙虾“

本文系统介绍如何基于Spring Boot WebFlux、React 18和TypeScript,从零搭建一个本地化的个人AI助手管理平台——AgentScope Paw。项目支持多Agent创建与管理、SSE流式对话、工作区文件CRUD、技能市场、子智能体孵化、AI辅助起草Agent配置等核心功能,并深度集成钉钉、企业微信、飞书、GitHub等IM通道。

program哲学 1430

vue之设置背景图片自适应屏幕

需求说明 图片覆盖整个浏览器窗口 图片处于整个页面最底层 根据浏览器窗口的变化改变图片大小 不能使图片变形 图片始终在浏览器窗口的中心位置 适应web端和移动端 实现方法 参考许多文章后,发现最实用的布局是edge浏览器的新标签页的背景图片布局。 通过整合多方方案,得出最佳方案。 不论是使用图片标签引入图片还是块级标签添加背景图片,都可以通过此方法实现自适应。 //模板标签 <template> //外层盒子需要动态绑定宽高属性 <div class="register" :sty

weixin_43984150的博客 1万+

手把手教你学Simulink--基于Simulink的开关磁阻电机电流斩波控制仿真建模

特点:定子和转子均由普通硅钢片叠压而成,没有永磁体或绕组在转子上。工作原理:利用转子旋转时不同位置的磁阻变化产生转矩。控制挑战:由于SRM的高度非线性和磁饱和效应,需要复杂的控制算法来优化性能。利用Simscape Electrical中的模块构建SRM的物理模型,配置参数如电阻、电感等。matlab深色版本% 添加SRM电机模块根据实际需求调整电机参数。通过上述步骤,我们简要介绍了如何基于Simulink进行开关磁阻电机的电流斩波控制仿真建模。

MHD0815的博客 306

CUDA&PCL 点云体素下采样

CUDA&PCL 点云体素下采样

dayuhaitang1的博客 1268

css-形状边缘模糊处理

可以使用 box-shadow 给形状加一个阴影效果: eg: box-shadow:0 0 10px 10px #9fb1c5; 前面两个参数为 0 ,阴影就是围绕形状边缘一圈 box-shadow: h-shadow v-shadow blur spread color inset; h-shadow: 必需的。水平阴影的位置。允许负值 v-shadow: 必需的。垂直阴影的位置。允许负值 blur: 可选。模糊距离 (控制模糊程度,数值越大越模糊) spread: 可选。阴影的大小(数值越大,阴影越大

qq_39111074的博客 1万+

168、运动控制中的标定:编码器零点标定

文章摘要 运动控制系统中的编码器零点标定是确保精确控制的关键基础步骤。文章通过实际案例说明,即使0.3度的零点偏移也会导致电机异常抖动。详细介绍了三种标定方法:反电动势法(需示波器)、电流注入法(适合量产)和霍尔传感器法(粗标定),并指出常见陷阱如忽略极对数、Z脉冲重复性问题和温度漂移。提供了基于STM32的嵌入式实现代码片段,强调标定后的静态、动态和负载验证的重要性。作者建议量产产品设置自动标定工位,研发样机采用更精确的方法,并强调标定数据应与电机序列号绑定。

m0_50546716的博客 137

vuejs官网之处理边界情况

这里记录的都是和处理边界情况有关的功能,即一些需要对vue的规则做一些小调整的特殊情况。不过注意这些功能都是有劣势或危险的场景的,我们会在每个案例中注明。所以当你使用每个功能的时候请稍加留意 访问元素和组件 在绝大多数情况下,我们最好不要触达另一个组件实例内部或手动操作dom元素。不过也确实在一些情况下做这些事情是合适的 访问根实例 在每个new vue实例的子组件中,其根实例可以通过$r...

飞鸿的博客 997

OV9734 DATASHEET,完整规格书

OV9734完整规格书,包括电气参数,尺寸规格,寄存器配置表等

pscad IEEE标准系统搭建说明

pscad IEEE标准系统搭建说明,包含典型的IEEE 9节点、14节点、30节点、39节点和118节点系统。内含标准测试系统的原始数据和潮流结果。

Vue学习—深入剖析处理边界情况

处理边界情况一、处理边界情况1.访问元素 & 组件1.访问根实例2.访问父级组件实例3.依赖注入4.访问子组件实例或子元素2.程序化的事件侦听器3.循环引用1.递归组件2.组件之间的循环引用4.模板定义的替代品1.内联模板2.X-Template5.控制更新1.强制更新2.通过v-once创建低开销的静态组件 一、处理边界情况 接下来我们要学习的都是和处理边界情况有关的功能,即一些需要对 Vue 的规则做一些小调整的特殊情况。需要注意的是,这些功能都是有劣势或危险场景的。 1.访问元素 &

xun__xing的博客 566

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

vue处理边界情况

vue处理边界情况之$root,$parents,$refsVue 子组件可以通过 $root 属性访问父组件实例的属性和方法官网地址:cn.vuejs.org/v2/guide/co…<div id="app"> <root-obj></root-obj> </div> Vue.component('root-obj', { dat...

weixin_33768481的博客 635

Data-Structures-and-Algorithm-Analysis-in-Java.pdf

作者: Weiss, Mark A. 出版社: Addison Wesley Data Structures and Algorithm Analysis in Java is an “advanced algorithms” book that fits between traditional CS2 and Algorithms Analysis courses. In the old ACM Curriculum Guidelines, this course was known as CS7. This text is for readers who want to learn good programming and algorithm analysis skills simultaneously so that they can develop such programs with the maximum amo...

vue 官方文档 - 处理边界情况

1. 处理边界情况 官方文档 - 处理边界情况 1.1. 访问元素 & 组件 1.1.1. 访问根组件 所有子组件都可以通过 this.$root 访问 main.js 的那个根实例 ⛔:大型应用建议使用 vuex 来管理! 1.1.2. 访问父组件 所有子组件可以通过 this.$parent 访问 上一级父组件,但是嵌套层级太深就会出现一个问题 1.1.3. 访问子组件实例或元素 可以通过给子组件设置一个 ref,来进行访问,比如可以在父组件写一个聚焦函数,让子组件里面的 input 进行聚

qq_39811414的博客 334

【Vue】—处理边界情况

【Vue】—边界处理的情况 一、边界处理—$ref vue是数据驱动的 很少直接操作dom元素,但是有的时候的确需要操作dom 这是vue中提供ref来获取dom <div ref='myref'></div> <Son ref='myson'></Son> 通过 this.$refs.myref来获取 二、获取根实例—$root $root:获取new Vue()的实例 三、获取父级组件实例—$parent $parent: 获取父级组件实例 由自己组

道阻且长,行则将至。 589

vue 处理组件边界情况

在vue文档中有处理组件边界情况的api: $root:存储到根实例中 parent/parent/parent/children,可以访问父组件、子组件的属性,也可以进行修改 $refs:可以访问子组件 依赖注入provide/inject $root 我们在创建vue实例的时候可以将数据挂载到根节点 ``` //main.js new Vue({ render: h => h(App), data: { title: '根实例 - Root' }, methods:

黑山老妖的小站 486

vue 必须使用refs获取元素吗_Vue之处理边界情况

处理边界情况 All the features on this page document the handling of edge cases,meaning unusual situations that sometimes require bending Vue’s rules a little. Note however, that they all have disadvantages ...

weixin_39584549的博客 177

【VueJS】VueJS---处理边界情况

访问元素 &amp; 组件 在绝大多数情况下,我们最好不要触达另一个组件实例内部或手动操作 DOM 元素。不过也确实在一些情况下做这些事情是合适的。 访问根实例 在每个 new Vue 实例的子组件中,其根实例可以通过 $root 属性进行访问。例如,在这个根实例中: // Vue 根实例 new Vue({ data: { foo: 1 }, compute...

DreamSeeker_1314的博客 455

Vue.js 组件 处理边界情况

这里记录的都是和处理边界情况有关的功能,即一些需要对 Vue 的规则做一些小调整的特殊情况。不过注意这些功能都是有劣势或危险的场景的。我们会在每个案例中注明,所以当你使用每个功能的时候请稍加留意。 访问元素 &amp; 组件 在绝大多数情况下,我们最好不要触达另一个组件实例内部或手动操作 DOM 元素。不过也确实在一些情况下做这些事情是合适的。 访问根实例 在每个 new Vue 实例的子...

GarfieldEr007的专栏 756

Vue边界处理情况

一.访问根实例$root Vue 子组件可以通过 $root 属性访问父组件实例的属性和方法 写入根组件的数据 <div id="app"> {{msg}} <root-obj></root-obj> </div> <script> Vue.component("root-obj",{ data () { return { } }, templ

Yueqin0512的博客 285
上一篇: Vue插槽的那些事儿
下一篇: Vue之过渡动画(一)
小菜101
博客等级 码龄10年 16粉丝 92原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值