Vue.js:子组件如何改变父组件的状态
Vue.js: How the child components mutate the parent's state?
在vuejs.org中,有人说:
双向绑定会将子节点的msg属性的变化同步回父节点的parentMsg属性。(这是链接)
但是我很困惑,我怎么能改变孩子的属性,使这个变化可以同步回它的父?
路由器
// Define rule of router.
router.map({
'/categories': {
// The List.vue
component: CategoryList,
subRoutes: {
// ... some rules ...
'/add': {
// The DetailAdd.vue
component: CategoryDetailAdd
}
}
}
});
列表。Vue(父节点)
<template>
<tab v-bind:tabs="tabs" :active="active"></tab>
<div class="col-lg-12">
<router-view :categories="categories"></router-view>
</div>
</template>
<script>
var Tab = require('../common/Tab.vue');
export default{
components:{
tab: Tab
},
data() {
return {
categories: [],
tabs: [],
active: '1'
};
},
ready() {
this.$http.get('/categories').then((response) => {
// success
this.$set('categories', response.data.categories);
this.$set('tabs', response.data.tabs);
this.$set('active', response.data.active);
}, (response) => {
// error
})
}
}
</script>
DetailAdd。Vue(子节点)
<template>
<form class="form-horizontal" method="post" action="/categories/add">
<div class="form-group">
<label for="name" class="col-md-2 control-label">name</label>
<div class="col-md-10">
<input id="name" type="text" class="form-control" name="name" value="" />
</div>
</div>
<div class="form-group">
<label for="category_id" class="col-md-2 control-label">superiror</label>
<formselect></formselect>
</div>
<div class="form-group">
<label for="sort_order" class="col-md-2 control-label">sort</label>
<div class="col-md-10">
<input id="name" type="text" class="form-control" name="sort_order" value="" />
</div>
</div>
<formbutton></formbutton>
</form>
</template>
<script>
var FormSelect = require('../common/FormSelect.vue');
var FormButton = require('../common/FormButton.vue');
export default{
components: {
formselect: FormSelect,
formbutton: FormButton
}
}
$(function() {
$('.nav-tabs').on('ready', function() {
$('.nav-tabs li').attr('class', '');
$('.nav-tabs li:last').attr('class', 'active');
});
});
</script>
我只是想改变父(List.vue
)的active
属性,如何实现这一点?
谢谢大家!
双向绑定的工作原理与您想象的一样:当您更改父类中的属性时,它会在子类中更改,反之亦然。看看这个例子:https://jsfiddle.net/u0mmcyhk/1/,子进程能够改变父进程的状态。如果将.sync
从父模板中移除,则该模板将停止工作。
话虽如此,.sync
将在2.0中弃用,而支持通信(broadcast
, dispatch
)或一些状态管理,如vuex
。
更多信息:https://vuejs.org/api/#v-bind
相关文章:
- ReactJS:如何在改变状态后立即更新组件
- 改变<选择>有状态React组件中的值
- 改变悬停组件的背景颜色
- React组件在状态改变后不重新呈现
- 当父组件状态改变时,如何强制子组件重新呈现
- 如何改变react组件的样式和类
- js:创建一个多选择组件.选项组件状态的组合流不输出改变的状态
- 当改变url参数时,React路由器不会重新加载组件
- 改变组件的位置
- VueJs 2.0循环组件和改变道具
- 带有改变视图的Reactjs组件
- 为什么在参数中被处理的组件会改变
- React JS -当localStorage状态改变时,获得一个单独的组件来重新渲染
- 在React.js中,点击一个组件中的按钮不会改变其他组件中的值
- 当状态改变时,组件无法重新呈现
- React状态的改变不会导致组件重新渲染
- 复选框像单选按钮一样工作,但不会改变UI组件
- React-Redux connect()不更新组件,即使状态被改变而没有突变
- Vue.js:子组件如何改变父组件的状态
- 如何引用被淘汰组件改变的元素