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.特殊情况下的处理方式,有利有弊

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来管理应用的状态:如下

用根实例获取状态 VSVuex管理状态


aHR0cHM6Ly9jZG4ubmxhcmsuY29tL3l1cXVlLzAvMjAyMC9wbmcvMTAzNTgyLzE1OTM1NjcxMDE1ODQtY2M5YjUwZmEtYTAzNC00YzQzLWIyNzktNjg5ZjVkNDM3YzZjLnBuZw.png


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>
  `
})
目录
相关文章
|
2月前
|
JavaScript
vue使用iconfont图标
vue使用iconfont图标
140 1
|
2天前
|
监控 JavaScript 前端开发
ry-vue-flowable-xg:震撼来袭!这款基于 Vue 和 Flowable 的企业级工程项目管理项目,你绝不能错过
基于 Vue 和 Flowable 的企业级工程项目管理平台,免费开源且高度定制化。它覆盖投标管理、进度控制、财务核算等全流程需求,提供流程设计、部署、监控和任务管理等功能,适用于企业办公、生产制造、金融服务等多个场景,助力企业提升效率与竞争力。
47 12
|
20天前
|
JavaScript 安全 API
iframe嵌入页面实现免登录思路(以vue为例)
通过上述步骤,可以在Vue.js项目中通过 `iframe`实现不同应用间的免登录功能。利用Token传递和消息传递机制,可以确保安全、高效地在主应用和子应用间共享登录状态。这种方法在实际项目中具有广泛的应用前景,能够显著提升用户体验。
48 8
|
20天前
|
存储 设计模式 JavaScript
Vue 组件化开发:构建高质量应用的核心
本文深入探讨了 Vue.js 组件化开发的核心概念与最佳实践。
58 1
|
3月前
|
JavaScript 前端开发 开发者
vue 数据驱动视图
总之,Vue 数据驱动视图是一种先进的理念和技术,它为前端开发带来了巨大的便利和优势。通过理解和应用这一特性,开发者能够构建出更加动态、高效、用户体验良好的前端应用。在不断发展的前端领域中,数据驱动视图将继续发挥重要作用,推动着应用界面的不断创新和进化。
108 58
|
2月前
|
JavaScript 关系型数据库 MySQL
基于VUE的校园二手交易平台系统设计与实现毕业设计论文模板
基于Vue的校园二手交易平台是一款专为校园用户设计的在线交易系统,提供简洁高效、安全可靠的二手商品买卖环境。平台利用Vue框架的响应式数据绑定和组件化特性,实现用户友好的界面,方便商品浏览、发布与管理。该系统采用Node.js、MySQL及B/S架构,确保稳定性和多功能模块设计,涵盖管理员和用户功能模块,促进物品循环使用,降低开销,提升环保意识,助力绿色校园文化建设。
|
3月前
|
JavaScript 前端开发 开发者
vue学习第一章
欢迎来到我的博客!我是瑞雨溪,一名热爱前端的大一学生,专注于JavaScript与Vue,正向全栈进发。博客分享Vue学习心得、命令式与声明式编程对比、列表展示及计数器案例等。关注我,持续更新中!🎉🎉🎉
64 1
vue学习第一章
|
3月前
|
JavaScript 前端开发 索引
vue学习第三章
欢迎来到瑞雨溪的博客,一名热爱JavaScript与Vue的大一学生。本文介绍了Vue中的v-bind指令,包括基本使用、动态绑定class及style等,希望能为你的前端学习之路提供帮助。持续关注,更多精彩内容即将呈现!🎉🎉🎉
61 1
|
3月前
|
缓存 JavaScript 前端开发
vue学习第四章
欢迎来到我的博客!我是瑞雨溪,一名热爱JavaScript与Vue的大一学生。本文介绍了Vue中计算属性的基本与复杂使用、setter/getter、与methods的对比及与侦听器的总结。如果你觉得有用,请关注我,将持续更新更多优质内容!🎉🎉🎉
52 1
vue学习第四章
|
3月前
|
JavaScript 前端开发 算法
vue学习第7章(循环)
欢迎来到瑞雨溪的博客,一名热爱JavaScript和Vue的大一学生。本文介绍了Vue中的v-for指令,包括遍历数组和对象、使用key以及数组的响应式方法等内容,并附有综合练习实例。关注我,将持续更新更多优质文章!🎉🎉🎉
44 1
vue学习第7章(循环)

热门文章

最新文章