我想在Vue中创建自己的复选框。我想使用fontawesome中的两个图标(锁定和解锁)。选中“我的复选框”后,图标应锁定,否则将解锁。
这是我的代码:
<template>
<div>
<i @click="statusChanged()" v-if="!checked" class="fas fa-lock-open lock"></i>
<i @click="statusChanged()" v-if="checked" class="fas fa-lock lock"></i>
</div>
</template>
<script lang="ts">
import Vue from 'vue';
import { Prop } from 'vue/types/options';
export default Vue.extend({
props: {
checked: {
type: Boolean as Prop<boolean>,
},
},
methods: {
statusChanged() {
this.checked = !this.checked;
},
},
});
我收到一个错误:
无法分配给“checked”,因为它是常量或只读属性
你能帮我解决这个问题吗?
答案最初由OP@Marek编辑成问题,由社区复制到这里。
我能够解决这个问题。解决方案与@TommyF建议的非常相似。
以下是解决方案:
<template>
<div>
<i v-if="!checked" class="fas fa-lock-open lock" @click="statusChanged()"></i>
<i v-if="checked" class="fas fa-lock lock" @click="statusChanged()"></i>
</div>
</template>
<script lang="ts">
import Vue from 'vue';
import { Prop } from 'vue/types/options';
export default Vue.extend({
props: {
checked: {
type: Boolean as Prop<boolean>,
},
},
model: {
prop: 'checked',
event: 'click',
},
methods: {
statusChanged() {
this.$emit('click', !this.checked);
},
},
});
</script>
查看prop.sync
修改器。它正是针对这种情况而设计的,即您希望更新父值,但将其作为属性传递给子级:
https://vuejs.org/v2/guide/components-custom-events.html#sync-修饰语
基本上,您将道具标记为可同步:
要更新父级,您需要从子级发出一个
update:prop
事件:this.$emit('update:checked',!this.checked)
这将使您开始使用您的解决方案:
https://codesandbox.io/s/97rl86n64
问题内容: 什么是对React组件prop更新进行单元测试的正确方法。 这是我的测试装置; 这可以正常工作,并且测试通过了,但是显示了反应警告消息 我要测试的只是属性的更新,而不是使用其他属性创建元素的新实例。有没有更好的方法来执行此属性更新? 问题答案: AirBnB的酶库为这个问题提供了一个优雅的解决方案。 它提供了一个setProps方法,可以在浅包装或jsdom包装上调用该方法。
示例代码:https://github.com/d6u/example-redux-update-nested-props/blob/master/one-connect/index.js 查看现场演示:http://d6u.github.io/example-redux-update-nested-props/one-connect.html 我有上面的组件,回购和重新整理。我想更新第一个rep
我是新来的,对一些事情有点困惑。我在网上读了许多文章,声称组件不能改变自己的道具,但是父组件可以改变其子组件的道具。然而,我没有看到任何真正展示如何做到这一点的东西。 我希望能够做到这一点: 然而,我根本不知道如何做到这一点——尽管我在React上读到的几乎所有材料都说父母可以改变孩子的道具。我能正常工作的如下: 当我只想重新渲染子视图时,父视图需要重新渲染,这对我来说似乎有点过分了。如何更改<代
这是具有状态(值和项)的父组件。我试图将值状态作为道具传递给子组件。当我点击按钮时,在render方法中执行的代码正在执行切换。但当我调用componentDidMount中的list函数时,切换不起作用,但执行了click事件。 这是我的子组件,其中状态作为道具传递 我知道组件didmount只执行一次。但是除了在render方法中直接编写JSX之外,如何使它工作呢
问题内容: 在开始使用React.js之后,似乎是静态的(从父组件传入),而基于事件的更改则似乎是静态的。但是,我在文档中注意到对的引用,其中具体包括以下示例: 这似乎意味着,性能可以改变根据的比较组件来。我想念什么?道具如何更改,或者我误认为道具的调用位置? 问题答案: 除非组件是数组或对象,否则组件不能更新其自身的props(即使可能,组件也要更新其自己的props是反模式),但是可以更新其状
我是新手,基本上我正在尝试立即更新父组件的状态及其子组件(和)道具。当前仅更新父组件的状态。我会一步一步地解释清楚。 这里我有一个父组件 这个组件有两个对象数组(和),分别作为道具发送到和组件。接收selectedPlayer和setSseltedPlayer。两个组件都有一个组件和一个选择输入。在组件中,用户将选择一个团队,他们将显示所选团队的球员,而在组件中,将选择一个球员,他们将显示选中的玩