升级到Vue 2.0我有很常见的问题
我得到警告:
避免直接改变道具,因为每当父组件重新渲染时,该值将被覆盖。相反,使用基于道具值的数据或计算属性。正在变异的道具:“用户名”(在组件中找到)
我读了很多次文档,但仍然不明白如何修复它。
用户名
和密码
在主Vue应用中声明。
这是我的代码:
var GuestMenu = Vue.extend({
props : ['username', 'password'],
template: `
<div id="auth">
<form class="form-inline pull-right">
<div class="form-group">
<label class="sr-only" for="UserName">User name</label>
<input type="username" v-model="username" class="form-control" id="UserName" placeholder="username">
</div>
<div class="form-group">
<label class="sr-only" for="Password">Password</label>
<input type="password" v-model="password" class="form-control" id="Password" placeholder="Password">
</div>
</form>
</div>`,
});
App = new Vue ({
el: '#app',
data:
{
topMenuView: "guestmenu",
contentView: "guestcontent",
username: "",
password: "",
}
})
我尝试了v-bind
,但它似乎不起作用,我不明白为什么。它应该将该值绑定到父级(主Vue应用程序)
VUE JS认为这是反模式。例如,声明和设置一些道具,如
this.propsVal = 'new Props Value'
因此,要解决这个问题,您必须从道具中获取Vue实例的数据或计算属性的值。喜欢
props: ['propsVal'],
data: function() {
return {
propVal: this.propsVal
};
},
methods: {
...
}
你可以像平常一样使用道具的价值。
您应该使用getter和setter创建一个计算属性,然后使用$emit
更新该属性,例如:
var GuestMenu = Vue.extend({
props: ['username', 'password'],
template: `
<div id="auth">
<form class="form-inline pull-right">
<div class="form-group">
<label class="sr-only" for="UserName">User name</label>
<input type="username" v-model="usernameInput" class="form-control" id="UserName" placeholder="username">
</div>
<div class="form-group">
<label class="sr-only" for="Password">Password</label>
<input type="password" v-model="passwordInput" class="form-control" id="Password" placeholder="Password">
</div>
</form>
</div>`,
computed: {
usernameInput: {
get: function(){
return this.username;
},
set: function(newValue){
this.$emit('update:username', newValue)
}
},
passwordInput: {
get: function(){
return this.password;
},
set: function(newValue){
this.$emit('update:password', newValue)
}
},
}
});
在上的Vue 2.3.0中,您可以使用.sync
修改器:
样本来自https://vuejs.org/v2/guide/components-custom-events.html#sync-修饰语:
<text-document :title.sync="title"></text-document>
在你的控制器里。。。
this.$emit('update:title', newTitle)
我的观点是这样的: 我的星形组件如下所示: 我的css是这样的: 当我点击星号时,控制台上出现如下错误: [Vue warn]:避免直接改变道具,因为每当父组件重新渲染时,该值将被覆盖。相反,使用基于道具值的数据或计算属性。正在变异的道具:“value”(位于C:\xampp\htdocs\myshop\resources\assets\js\components\Star.vue) 我怎样才能解
我是Vue JS的新手,我遇到了这个问题,我试图通过将父道具传递给孩子来制作数据表 我犯了这个错误 [Vue warn]:避免直接改变道具,因为每当父组件重新渲染时,该值将被覆盖。相反,使用基于道具值的数据或计算属性。道具正在变异:“editem” 这是我的密码 这是我的页面: 这是我的组件:
我得到警告: app.js:87486[Vue警告]:避免直接更改prop,因为每当父组件重新呈现时,该值将被覆盖。相反,使用基于道具值的数据或计算属性。被变异的道具:“喜欢计数” 我的刀锋 Vue代码
如何解决此错误消息: [Vue warn]:避免直接改变道具,因为每当父组件重新渲染时,该值将被覆盖。相反,使用基于道具值的数据或计算属性。道具变异:“抽屉” 父组件: 子组件:
我正在学习vuejs,但我找不到合适的答案。当我点击编辑年龄按钮或更改我的名字按钮,我得到下面的错误。 [Vue warn]:避免直接改变道具,因为每当父组件重新渲染时,该值将被覆盖。相反,使用基于道具值的数据或计算属性。道具变异:“我的名字” [Vue warn]:避免直接改变道具,因为每当父组件重新渲染时,该值将被覆盖。相反,使用基于道具值的数据或计算属性。道具变异:“用户年龄” 代码在这里。
我有一个组件,我想在不同的页面上使用。嗯,它在第一次切换之前工作良好。它显示像以前一样,但是当我单击“关闭”按钮时,它会关闭,但是控制台输出: [Vue warn]:避免直接改变道具,因为每当父组件重新渲染时,该值将被覆盖。相反,使用基于道具值的数据或计算属性。道具变异:“可见” 发现于 --- 在那之后点击就不显示了 有办法解决这个问题吗? Snackbar.vue 我ogin.vue