我应该如何使用 Vue 组件控制类实例属性的状态?

2024-01-02

我正在使用一个第三方库,该库使用带有 getter/setter 属性的类实例,并且我想使用 VueJS 组件来控制这些属性。我不应该直接使用实例作为组件状态(Evan You 说它是“一个兔子洞 https://github.com/vuejs/vue/issues/2718#issuecomment-214003100”),但是如果我必须编写自己的中间代码来将组件状态映射到类状态,那么反应式数据绑定首先有什么意义呢?

Example:

// Toggle.js
var Toggle = Vue.component("Toggle", {
  template: '<label><input type="checkbox" v-model="visible">Click me!</label>',
  props: ["visible"]
});

// Third-party library
var Widget = function() {
  this._visible = true;
}
Widget.prototype = {
  get visible(){ return this._visible; },
  set visible(v){ this._visible = v; }
}

// app.js
var widgets = [new Widget(), new Widget(), new Widget()];
var v = new Vue({
  el: "#content",
  template: "<div><toggle v-for='(widget,idx) in widgets' :visible='widget.visible' :key='idx'></toggle></div>",
  data: {widgets},
  components: { Toggle }
});
<script src="https://vuejs.org/js/vue.js"></script>

<div id="content"></div>

上面的示例不是执行此操作的正确方法,原因有两个:一是因为props意味着是从父级到子级的单向绑定,并且是两个,因为 Widget 实例是一个复杂的对象,无法进行响应式操作。

对于这个案例,什么是好的设计模式?请记住,我不控制 Widget 类,因此任何解决方案都必须在不更改其定义的情况下工作。


None

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

我应该如何使用 Vue 组件控制类实例属性的状态? 的相关文章

  • 鼠标移动时画布拖动

    我正在尝试构建一个可以使用鼠标移动拖动的画布 我做了一些我无法理解的错误 因为一开始似乎有效 然后出现了一个增量错误 使画布移动得太快 考虑以下代码 window onload function var canvas document ge
  • 使用 babel env 预设时,展开运算符出现语法错误

    我正在努力 现代化 meern io 入门样板 https github com Hashnode mern starter通过替换巴别塔es2015 and stage 0预设为env 然而 似乎env预设无法识别以下片段client m
  • 为什么我可以使用 Date 对象进行数学运算? [复制]

    这个问题在这里已经有答案了 当我像这样减去两个日期对象时 const startTime new Date await someAsyncStuff const endTime new Date const elapsedTime endT
  • 是否有任何理由使用 axios 而不是 ES6 fetch [关闭]

    Closed 这个问题是基于意见的 help closed questions 目前不接受答案 研究了 axios 和 ES6 fetch 的文档 我发现两者非常相似 并且都受到 ajax 及其简写的强烈影响 axios 的主要优点是浏览器
  • 如何使用 github 托管外部 CSS 文件?

    我将 css 上传到 github 然后转到网站上的文件并单击 raw 选项 我尝试将其添加到网页中 但 chrome 给出以下错误 资源解释为样式表 但使用 MIME 类型 text plain 进行传输 https raw github
  • NodeJS - 将相对路径转换为绝对路径

    In my 文件系统我的工作目录在这里 C temp a b c d 在 b bb 下有文件 tmp txt C temp a b bb tmp txt 如果我想从工作目录转到该文件 我将使用以下路径 bb tmp txt 如果该文件不存在
  • 如何将React JS状态保存到本地存储中

    我不知道如何将 React js 状态存储到本地存储中 import React Component from react import App css import auth createUserProfileDocument from
  • 基于范围内变量的角度设置形式动作

    我一直在尝试设置一个搜索表单 可以在其中注入表单操作属性 在我的表格中我有
  • 使用 eval 时不会受到 XSS 威胁

    我正在制作 不是现在 但我仍然对这个感到好奇 一款使用 HTML5 和 JS 的游戏 我想要的是人们可以插入自定义脚本 但要安全 function executeCustomJS code eval code bad 当然这段代码非常糟糕
  • 如何让php页面从html页面接收ajax post

    我有一个非常简单的表单 其中有一个名字输入字段 我捕获了表单数据 并使用标准 jQuery 发布方法通过 ajax 将其传输到 PHP 页面 但是 我根本无法从 PHP 页面获得任何在服务器端捕获数据的响应 我不确定我做错了什么或缺少什么
  • 为什么 TypeScript 混合了模块和原型模式?

    我正在查看此页面上 TypeScript 生成的 JS 代码 http www typescriptlang org Playground http www typescriptlang org Playground 基本上 要创建一个Gr
  • chrome 选项卡/窗口中的 window.open 行为

    我有一小段 javascript 旨在打开两个或更多选项卡 这在 FF 和 IE 中工作正常 但 chrome 会在新窗口而不是选项卡中打开第二个窗口 它不依赖于 url 因为我已经尝试过使用两个相同的 url 第一个在选项卡中打开 第二个
  • 如何计算一行中Flexbox项目的数量?

    网格是使用 CSS flexbox 实现的 Example http jsbin com jumosicasi edit html css js output 本示例中的行数为 4 因为我出于演示目的固定了容器宽度 但是 实际上 它可以根据
  • 如何得知客户端从服务器的下载速度?

    根据客户的下载速度 我想以低质量或高质量显示视频 任何 Javascript 或 C 解决方案都是可以接受的 Thanks 没有任何办法可以确定 您只能测量向客户端发送数据的速度 如果没有来自客户端的任何类型的输入来表明其获取信息的速度 您
  • 有序 JSON 对象

    我有一个 servlet 它与数据库通信 然后返回有序 按时间排序 对象的列表 在servlet部分 我有 access DB returns a list of User objects ordered ArrayList users M
  • 从json中获取所有子节点

    我有以下 json var source k 01 k 02 children k 05 k 06 children k ABC k PQR k 07 k 03 我希望能够指定 k 的值并取回所有孩子 以及孙
  • 使用严格模式编译指示时如何声明全局变量

    使用自调用函数来包装严格模式兼容代码 通常称为严格模式编译指示 被认为是一种很好的做法 function use strict Strict code here 我的问题是在这种情况下如何声明全局变量 我今天知道的三种替代方案 替代方案 1
  • HTML5 地理定位 - 在 iOS 上无法始终工作

    目前正在使用 HTML5 地理定位 我已经在所有网络浏览器上测试了它 它似乎工作正常 然而 当我在 iPad 上测试地理定位时 它在 iPad mini 上始终有效 但当我将其放在更大的 iPad iPad 2 上时 位置似乎并不总是有效
  • 如何强制下载图片?

    我的页面上有一个动态生成的图像 如下所示 img src 我不想告诉我的用户右键单击图像并点击保存 而是想公开一个下载链接 单击该链接将提示下载图像 如何实现这一目标 最初我在 js 中尝试这样做 var path my image att
  • 在引导程序中以编程方式更改选项卡窗格选项卡

    我使用的选项卡窗格定义为 ul class nav nav tabs li a href personal Personal Information a li li class active a href contact Contact a

随机推荐

  • 为什么我无法在另一个文件中定义内联成员函数?

    我有三个文件 1 Joy h class Joy public void test 2 Joy cpp include Joy h inline void Joy test 3 main cpp include Joy h int main
  • 如何解决访问 CollabNet Subversion 控制台时出现 503 错误?

    我正在使用 Collabnate Subversion Edge 尝试访问 URL 时出现以下错误http localhost 3343 csvn http localhost 3343 csvn Collbnate 在 Windows S
  • 将 git 存储库移至第二台计算机?

    我有一个带有简单本地 git 存储库的项目 我想要move将该项目 文件夹等 转移到另一台计算机 并从现在开始从那里开始工作 我不想在旧机器上留下任何东西 当然除了我的其他 git 项目 我希望它就像我一直在新机器上工作一样 我可以简单地将
  • 405(不允许的方法)Laravel

    我在 Laravel 中尝试使用 ajax 删除项目时收到 405 方法不允许 请有人帮忙 这是我的路线 Route get home HomeController index gt name home Route post destroy
  • long long 在 32 位机器上的实现

    根据c99标准 尺寸为long long至少应为 64 位 这是如何在 32 位机器中实现的 例如 2 的加法或乘法 long longs 另外 什么相当于long long in C C 中的等效项也是 long long 标准并不要求它
  • 客户端无法连接到本地主机上的 RabbitMQ 服务器

    我通过 apt get 在 ubuntu 12 04 2 LTS 上安装了新的 RabbitMQ 3 1 3 并尝试在同一台服务器上启动消费者 但我遇到了连接问题 PhpAmqpLib Exception AMQPRuntimeExcept
  • Android studio java.lang.SecurityException:需要 INSTALL_LOCATION_PROVIDER 权限

    我正在android工作室工作 我正在移动应用程序上获取实时 GPS 坐标 在每个移动设备上都会生成坐标 但单个移动设备无法工作并给出zero 0 坐标有android版本9 下面是我的代码 SuppressLint MissingPerm
  • 使用 Promise 的 Lambda 的 sinon 存根

    我刚刚开始使用 sinon 并且在消除 DynamoDB 调用方面取得了一些初步成功 sandbox sinon createSandbox update stub sandbox stub AWS DynamoDB DocumentCli
  • iOS 测试/规范 TDD/BDD 以及集成和验收测试

    Locked 这个问题及其答案是locked help locked posts因为这个问题是题外话 但却具有历史意义 目前不接受新的答案或互动 在 iPhone 上进行行为驱动开发的最佳技术是什么 有哪些开源示例项目可以展示这些技术的合理
  • 如何通过JMX暴露Hystrix的断路器状态

    我一直在寻找有关如何在 JMX 上公开 Hystrix 断路器状态的教程 我刚刚发现了一个用于公开指标 例如计数器 仪表等 的 API 使用hystrix servo metrics publisher 是否可以在 JMX 上公开断路器状态
  • 在类中访问向量

    如果我的班级中有一个向量作为私有成员 那么访问它的最佳方式是什么 例如 采用以下简单的类 class MCL private std vector my vec public Include constructor here and oth
  • 使用 django-tables2 显示页码

    我目前正在使用 django tables2 显示数据集 文档没有特别提到这一点 所以我猜这可能需要一些表覆盖 但是 我希望有人已经完成了这一点 如何使用表格下方的 django tables2 呈现页码 我希望能够显示的是用户可以单击的页
  • 如何使用 sourcetree 进行恢复?

    如果您使用 sourcetree 恢复到先前提交的过程是什么 请不要使用命令行帮助 我了解如何在那里实现相同的结果 但我特别希望使用我友好的 atlassian 工具来实现这一点 你所说的恢复到底是什么意思 您可以提交一个反向提交右键单击提
  • 如何在 Swift 中将属性文本字符串附加到属性字符串

    我想在 Swift 中附加一个属性文本和另一个属性文本 请提供在 Swift 中添加两个属性字符串的示例代码 Use NSMutableAttributedString为了实现这一点 Example Swift 5 let yourAttr
  • 读取 Node.js 中的环境变量

    有没有办法读取 Node js 代码中的环境变量 例如Python的os environ HOME process env ENV VARIABLE Where ENV VARIABLE是您要访问的变量的名称 See Node js 文档p
  • 为什么在 Xcode 中可以创建组,但不能创建真正的文件夹?

    在做iOS编程的时候 很有趣的是 在Xcode 4 3 2 中 我们可以创建组 比如组调用Images 并向其中添加文件 作为链接或选择 将项目复制到组的文件夹中 所以它看起来像导航器中的一个真实文件夹 它甚至提到 复制到 组的 folde
  • SQLAlchemy:“如果不存在则创建模式”

    我想在 SQLAlchemy 中执行 CREATE SCHEMA IF NOT EXISTS 查询 还有比这更好的方法吗 engine sqlalchemy create engine connstr schema name config
  • R-suppressMessages/suppressWarnings 不起作用

    我尝试过使用suppressMessages expr suppressWarnings expr 但他们不断输出消息 eg suppressWarnings ksvm y data data type C svc cross 5 kern
  • 删除 Windows 上 Git 的缓存密码[重复]

    这个问题在这里已经有答案了 我最近在工作中更新了我的 Github 密码 公司 Github 帐户 我已经在我的一台虚拟机 Windows 10 上配置了 Git 但每次都不会git pull or git push它抛出错误消息 remo
  • 我应该如何使用 Vue 组件控制类实例属性的状态?

    我正在使用一个第三方库 该库使用带有 getter setter 属性的类实例 并且我想使用 VueJS 组件来控制这些属性 我不应该直接使用实例作为组件状态 Evan You 说它是 一个兔子洞 https github com vuej