javascript - 重置 Angular 1.5 View 模型

标签 javascript angularjs angular-components angularjs-1.5

我有一个相当大的 from,我尝试在按钮中重置它,但它没有按预期工作。

请参阅下面的代码

function someCtrl() {
    var temp;
    var vm = this;
    someService.then(function (res) {
        vm.data = res;
        temp = res;
    });

    vm.reset = function () {
        vm.data = temp; //so that vm will reset to res;
    }
}

这里我使用 ng-model 中的 vm.data 来编辑每个字段。但是当 ng-model 编辑 vm.data 时,temp 也会自行更新。我猜正在发生一些可变范围引用。因此,当调用 vm.reset 时,vm.data 和 temp 相同,因此不会发生重置。

请建议一种删除此变量范围引用的方法。

最佳答案

在 JavaScript 中,对象是通过引用传递的。 因此,在服务回调中,您将相同的响应对象分配给 vm.data 和 temp。这样,在更改 vm.data 时,您也会更改 temp,因为两者都指向相同的内存位置。

要使其正常工作,请将单独的实例(深度克隆资源对象)分配给 vm.data 和 temp。像这样:

someService.then(function (res) {
    vm.data = angular.copy(res);
    temp = res; // no need to deep clone this one. temp can point to the res obj
});

并将重置函数改为这样

vm.reset = function () {
    vm.data = angular.copy(temp); // assign "backup" value to vm.data
}

关于javascript - 重置 Angular 1.5 View 模型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41393983/

相关文章:

javascript - 关于如何向用户显示给定文本的建议标签的 UI 建议?

javascript - Vue.js 和 Moment.js 输出日期渲染对象而不是日期字符串

Angular 组件模板全局动态字体

javascript - 从 Angular 5 中的子组件更新父 bool 值

javascript - 插件中的 Vue.js 绑定(bind)上下文?

javascript - JS 循环遍历 json 对象

javascript - Angularjs 外部模板 : the template cannot be loaded?

css - 更改在angularjs中未选中的已选中行的背景颜色

angularjs - 使用表达式 `("&")` 绑定(bind)将数据从 AngularJS 组件传递到父范围

angular - 如何以 Angular 动态删除组件