Angularjs 否则{ _数据=_getData(); } _镜子BYROOTSCOPEWATCH(假); _mirrorByRef(假); } //返回原始数据的克隆 函数_getData(){ 返回JSON.parse(JSON.stringify({ “可编辑数据”:{ “测试”:{ “价值”:“永远不会放弃你” } }, “隐藏数据”:{ “测试”:{ “价值”:“永远不会让你失望” } } })); } //根据angular.merge(angular 1.4+)改编的合并功能http://stackoverflow.com/a/29003438/446030 函数合并(dst){ var slice=[].slice; var isArray=Array.isArray; 函数baseExtend(dst、objs、deep){ 对于(变量i=0,ii=objs.length;i

Angularjs 否则{ _数据=_getData(); } _镜子BYROOTSCOPEWATCH(假); _mirrorByRef(假); } //返回原始数据的克隆 函数_getData(){ 返回JSON.parse(JSON.stringify({ “可编辑数据”:{ “测试”:{ “价值”:“永远不会放弃你” } }, “隐藏数据”:{ “测试”:{ “价值”:“永远不会让你失望” } } })); } //根据angular.merge(angular 1.4+)改编的合并功能http://stackoverflow.com/a/29003438/446030 函数合并(dst){ var slice=[].slice; var isArray=Array.isArray; 函数baseExtend(dst、objs、deep){ 对于(变量i=0,ii=objs.length;i,angularjs,angularjs-service,Angularjs,Angularjs Service,此值通过链接到editableData.test.value 其facade服务中的引用 test1.value 控制器2 此值也链接到 editableData.test.value通过其外观中的引用 服务 test2.0值 核心数据 将editableData.test.value的值“镜像”到 hiddenData.test.value通过侦听 $rootScope.$digest从服务内部复制 在他们之间 使用下面的按钮启用/禁用镜像,然后键入 上面的输入字段 {{isWatching

此值通过链接到
editableData.test.value
其facade服务中的引用

test1.value 控制器2 此值也链接到
editableData.test.value
通过其外观中的引用 服务

test2.0值 核心数据 将
editableData.test.value的值“镜像”到
hiddenData.test.value
通过侦听
$rootScope.$digest
从服务内部复制 在他们之间

使用下面的按钮启用/禁用镜像,然后键入 上面的输入字段

{{isWatching()?“Disable”:“Enable”}使用镜像
$rootScope.$watch
{{isreference()?“Disable”:“Enable”}按引用镜像 重置
编辑:我似乎误解了这个问题,因为它是关于如何监视数据对象中的更改,您可以添加一个单独的服务/控制器,其唯一任务是监视更改。对我来说,这听起来足以让事情变得很好。下面是一个使用DataWatcher控制器的示例

旧答案:

根据
JSON,parse(JSON.stringify(obj))
是克隆对象最有效的方法。这就是你在这里要做的

大概是


myObject
中更改
editableData
时执行。您可能正在寻找
myObject

Hi Jan-谢谢,我发现这种克隆方法非常有用。让我感到困惑的部分是更新的最佳方式,正如您所说,“
myObject
中的
editableData
发生更改时”。我需要确保更新总是被触发,尽可能快-我会更新我的问题,试图澄清这一点,谢谢。是的,我实际上花了时间阅读了整面墙的文字,看到了你的意思。如果你想通过引用来链接属性,你也可以跳过整个链接,直接引用原始对象,因为实际上这就是你要做的。所以我不认为这是一个解决办法。阅读这篇文章让我最初的回答和我一样。你不能添加一个单独的服务,它唯一的工作就是监听
数据
对象,并在任何更改时更新隐藏的数据吗?考虑到这将是它唯一的工作,这是否足以让您感到放心地将范围注入到特定的服务中呢?我对您的代码做了一些修改,添加了一个使用控制器的示例,但它可以是服务或其他任何东西。:)
{
  "editableData": {
    "test": {
      "value": "Never gonna give you up"
    }
  },
  "hiddenData": {
    "test": {
      "value": "Never gonna let you down"
    }
  }
}
//linked at the parent obj containing the .value property
_data.hiddenData.test = _data.editableData.test;
function DataWatcher($scope, dataServiceCore) {
  function _watcherHasChanged() {
    return dataServiceCore.data.editableData;
  }
  function _watcherFireOnEveryChange() {
    dataServiceCore.data.hiddenData.test.value = dataServiceCore.data.editableData.test.value; //mirroring the value
  }
  $scope.$watch(_watcherHasChanged, _watcherFireOnEveryChange, true);
}
myObject.hiddenData = JSON.parse(JSON.stringify(myObject.editableData);