Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/vue.js/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/dart/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在vue.js中,是否可以通知;观察员“;在不更改观测数据值的情况下,从观测数据中重新提取值_Vue.js - Fatal编程技术网

在vue.js中,是否可以通知;观察员“;在不更改观测数据值的情况下,从观测数据中重新提取值

在vue.js中,是否可以通知;观察员“;在不更改观测数据值的情况下,从观测数据中重新提取值,vue.js,Vue.js,假设我有一个如下绑定的输入元素: <input :value="somedata"> yourvar.__ob__.dep.notify() 用户在输入中键入一些内容,由于我没有使用v-model或通过处理程序更改somedata,因此元素的值现在与somedata不同。这是我想要的,但我也希望具备以下能力: 在不更改somedata的值的情况下,我希望能够通知元素,以便它再次将其值设置为somedata。类似于knockout的notifySubscribers()或val

假设我有一个如下绑定的输入元素:

<input :value="somedata">
yourvar.__ob__.dep.notify()

用户在输入中键入一些内容,由于我没有使用
v-model
或通过处理程序更改
somedata
,因此元素的值现在与
somedata
不同。这是我想要的,但我也希望具备以下能力:

在不更改
somedata
的值的情况下,我希望能够通知元素,以便它再次将其值设置为
somedata
。类似于knockout的
notifySubscribers()
valuehassmutated()

这在vue.js中可能吗


更新:这里有一个问题的清晰说明:是的,您应该能够在
v-on:input
的帮助下完成此操作。您可以在
input
上调用函数,并将检查和更新逻辑放入该函数中:

<input :value="somedata" v-on:input="yourMethod">

事实上,如果你看一下,
是语法糖:

<input v-bind:value="something" v-on:input="something = $event.target.value">


因此,您可以将您的逻辑放在那个位置,而不是将变量
某物
指定给输入的值。

我不确定我是否正确地遵循了,但我会尝试一下

我认为您只想在某些值的“临时”值满足某种类型的条件时更新它们。我是这样想的

<div id="app">
  <input v-model="tempValues.one">
  <input v-model="tempValues.two">
  <input v-model="tempValues.three">

  <pre>{{ values }}</pre>
  <pre>{{ tempValues }}</pre>
</div>

这里有一个快速演示:

要解释满足您需求的具体要求和验收标准有点困难,我认为Bill的解决方案正是您所追求的,但在所有更新和澄清之后,我想我更了解您想要实现的目标:简言之,我认为您需要一种通用的方法来拥有一个可以保存一个值但可以独立还原为其他值的输入

请看一看。我相信它提供了你想要做的。它允许您创建一个
输入
元素作为
可恢复的
组件,可以选择传递一个默认值。对该输入的任何更改都由组件及其
数据属性进行维护。它不会观察/引入任何
lastnowngood
类型的值,因为任何反转都将从外部推入组件

可还原
组件外部,您可以
$emit
使用新值还原
事件,该事件将导致所有
可还原
组件或单个
可还原
组件(具有匹配ID)被还原

我觉得它基本上是一个干净的解决方案(假设我正确理解了需求),除了在VueJS 2中,当没有父子关系时,我们必须使用独立的共享Vue对象来传递事件。你会看到:

revertBus.$emit('revert', this.reversionValue, targetId)
在演示的全局范围中定义。
revertable
组件将使用它接收传入消息,如下所示:

revertBus.$emit('revert', null, targetId)
触发消息的控制Vue对象将按如下方式使用它:

<input :value="somedata">
yourvar.__ob__.dep.notify()
您还可以发出带有
null
值的事件,以使
可恢复组件将其值重置为初始默认值:

同样,这是一个基本上干净的解决方案,虽然它可能不完全符合您试图实现的目标,但我希望它至少可以帮助您更接近目标


在对象和数组上工作

您能详细说明一下用例吗?您想什么时候通知elment并将其值设置为
somedata
@saurabh?假设用户在输入中键入了一些内容,并且在某个时候触发了更改的事件。现在假设是否使用新的input.value更新基础数据的决定是异步确定的。如果决定是“是”,那么我可以继续使用输入中的新值设置观察到的属性。但是,如果决策为“否”,并且我想将输入的值还原为观察到的属性的值,该属性没有更改,那么该怎么办呢?因此,简而言之,在所有临时值都有值之前,您不想更新实际值?我知道,事实上,我已经有了一个使用change event的处理程序(不是输入事件,因为我不想为每个笔划计算),它会指定元素的值(event.target.value)对于一个临时的无功数据属性,但请参阅我的编辑,为什么这对您的小提琴不起作用,导致我考虑将输入绑定到临时值,但是我的示例只是试图显示用例。让我解释一下:我希望能够将一些数据单向绑定到一个输入,(即每当数据改变时,输入设置其值)。当用户在输入中键入内容时,我什么也不做。但我也希望能够将输入的值还原回数据,而不必引用输入,因为我可能希望在输入的任何事件处理程序之外执行此操作。请看:我现在明白了。这根本不是我从原始问题中得到的。我可能会使用
监视
相反:快速更新以显示数据的行为:可以,但是如果有多个组件在“观察”呢LastKnownGodStuff?:我需要每个元素都有一个显式的value属性,以及每个元素的revert方法的更改。因此,除非我遗漏了什么,否则您建议的方法比持有ref并直接更新元素更糟糕(使用$refs,我不必引入“value”属性).但关键是我想让revert方法完全独立于观察数据属性的任何对象。你认为我完全遗漏了什么吗?如果没有,是否值得发布一个功能请求?还有,在我的小提琴()中,注意一个非常重要的属性:如果我只是在html中粘贴一个新的输入元素或任何简单或复杂的组件,并将其绑定到lastknowngood stuff属性和
yourvar.__ob__.dep.notify()