重置更改的值在其他 Ctrl (AngularJS) 中不起作用

2024-01-10

我对我的问题有点困惑。事实上,我有 2 个正在使用服务的视图和 ctrl。 第一个视图包含一个表格列表,其中包含将从 WebAPI 加载的项目。该服务向服务器发出请求并按订单提供。另外,我正在使用另一个服务来传输另一个 Ctrl 中的所选项目行。 这是代码:

View1:

//view1.html
<table class="table table-bordered table-hover">
  <thead>
    <tr>
      <th>Firstname</th>
      <th>Lastname</th>
    </tr>
  </thead>
  <tbody>
    <tr ng-repeat="item in namelist" ng-click="open(this.item)">
      <td>{{ item.fname }}</td>
      <td>{{ item.lname }}</td>
    </tr>
  </tbody>
</table>

Ctrl1:

//FirstCtrl
$scope.namelist = reqService.names.query();

$scope.open = function (item) {
  $scope.selectedItem = item;           
  modalService.openDialog($scope.namelist, $scope.selectedItem);
}

HTTP 服务:

//Service for HTTP Requests
testApp.factory('reqService', ['$resource', 'baseUrl', function ($resource, baseUrl) {
    return {
        names: $resource(baseUrl + '/api/name/:Id', {
            Id: '@Id'
        }, {
            'update': {
                method: 'PUT'
            }
        })
    }
}]);

模式对话框服务:

//Modal dialog service
testApp.factory('modalService', ['$modal', function ($modal) {
    return {
        openDialog: function (namelist, selectedItem) {
            return $modal.open({
                templateUrl: 'views/view2.html',
                controller: 'SecondCtrl',
                resolve: {
                    namedList: function () {
                        return namelist;
                    },
                    selected: function () {
                        return selectedItem;
                    }
                }
            });
        }
    }
}]);

Ctrl2:

testApp.controller('SecondCtrl', ['$scope', '$modalInstance', 'namedList', 'selected', 'reqService', '$http'..., function (...){
   /*copy of the original items*/
   $scope.copyItem = angular.copy(selected);

   $scope.cancel = function () {
      $scope.selected = angular.copy($scope.copyItem);
      $modalInstance.dismiss('cancel');
   }

   $scope.reset = function () {
      $scope.selected = angular.copy($scope.copyItem);
      selected = angular.copy($scope.copyItem); //doesn't work
   }
}

我的问题是如何重置表列表?当我单击 ResetBtn 时,它仅重置模式窗口中的表单,但更改仍保留在表列表中?!我无法重置解析变量“选定”。


这可能是一个按值传递的情况|引用。
读这个JavaScript 是一种按引用传递还是按值传递的语言? https://stackoverflow.com/questions/518000/is-javascript-a-pass-by-reference-or-pass-by-value-language .

如果您尝试传递一个重置该值的函数,那么看看它是如何工作的将会很有趣。

一种可能的实现

Ctrl1:

$scope.open = function (item) {
    $scope.selectedItem = item;           
    modalService.openDialog($scope.namelist, function(e){
        if (e === undefined) {
            return $scope.selectedItem;
        } else {
            $scope.selectedItem = e;
        }
    });
}

Ctrl2 开始:

testApp.controller('SecondCtrl', ['$scope', '$modalInstance', 'namedList', 'selected', 'reqService', '$http'..., function (...){
    /*copy of the original items*/
   $scope.copyItem = angular.copy(selected());

   $scope.cancel = function () {
      $scope.selected = angular.copy($scope.copyItem);
      $modalInstance.dismiss('cancel');
   }

   $scope.reset = function () {
      $scope.selected = angular.copy($scope.copyItem);
      selected(angular.copy($scope.copyItem));
   }
}

好吧,我知道它很脏,但这只是为了测试假设。

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

重置更改的值在其他 Ctrl (AngularJS) 中不起作用 的相关文章

随机推荐

  • 获取Golang正则表达式中括号内的所有子字符串

    我想使用正则表达式获取 go 中所有括号内的所有子字符串 作为字符串 foo bar foo baz golang 的示例 我想要 bar 和 baz 在Python中我可以做re findall lt foo bar foo baz go
  • 卡尔曼滤波器总是在第一时间预测 0,0

    以下代码用于从下到上扫描图像 然而 卡尔曼滤波器的预测在第一次时总是显示0 0 这样 它就会从底部到 0 0 绘制一条线 如何使路径 卡尔曼滤波器 更接近实际路径 以下代码和图像已更新 import cv2 import matplotli
  • 布局API版本命名

    我不知道这是如何工作的 如果我创建了一个名为layout v11这适用于 v11 以上的所有 api 版本还是仅适用于 v11 第二个我可以将文件夹命名为layout v11 v14仅对 v11 和 v14 API 使用此布局 后缀指定资源
  • 从 xamarin 将文件上传到 Web api 服务器 - 请求处理时间太长

    我正在使用 HttpClient 将二进制文件发布到 Azure 托管的服务器 对于大小不太大的文件 该请求需要很长时间才能传递 有时 当客户端因超时而取消任务时 服务器会收到请求 我使用以下代码异步上传数据 public async Ta
  • Spirit X3可以与BOOST_FUSION_ADAPT_ADT一起使用吗?

    将我的代码从 QI 更改为 X3 并出现一些编译错误BOOST FUSION ADAPT ADT 我尝试了boost 1 64和1 67 它们都不起作用 我修改了精灵X3的例子rexpr min 添加 getter 和 setterstru
  • blogpost 的 rss feed 分页 url 是什么样的?

    我知道要访问 blogspot 博客的 rss feed 您需要访问 blog blogspot com feeds posts default 但是如何获取提要的第二页呢 我知道其他博客使用查询参数 paged 2 是否有类似的查询参数可
  • 如果资源已经存在,如何告诉 helm 不要创建/更改资源?

    我有一个秘密资源模板 安装后将为数据生成随机值 删除该图表 它没有删除秘密资源 因为它们保留下来 并稍后重新安装后 我遇到了问题 这导致它使用新生成的数据运行以前的秘密 这在我的情况下是不希望的 我试图找到我需要包含在模板中的 if 条件是
  • ASP.NET5 MVC6 的模型绑定问题

    我尝试将一些 JSON 数据以角度形式发布到我的 ASP NET5 MVC6 控制器操作 模型绑定器似乎不起作用 不知道我在这里缺少什么 我的 ASP 控制器 public class DefaultController Controlle
  • 有没有更好的方法为 numpy 数组标量分配新值?

    我正在对 numpy 数组中的标量值进行一些快速计算 正如它在文档 https docs scipy org doc numpy 1 13 0 user basics types html array scalars 使用数组标量的主要优点
  • 在ListBox中设置DrawMode删除水平滚动条

    我将列表框控件中的 DrawMode 设置为 OwnerDrawFixed 以便可以为某些项目着色 当项目太长而无法容纳列表框的水平空间时 不会出现水平滚动 怎样才能让滚动条出现呢 您应该在 OwnerDrawFixed 模式下设置列表框的
  • WPF dataGrid 多列的超级标题

    我想在WPF中为多列做标题DataGrid 我尝试使用标题模板 但它会显示一列的标题 下面的 XAML 我尝试过
  • MS Access 限制 X、Y

    是否可以模拟以下 MySQL 查询 SELECT FROM tbl ORDER BY date DESC LIMIT X 10 X为参数 在 MS Access 中 虽然访问 JET TOP关键字不直接提供OFFSET能力 我们可以巧妙地结
  • 为什么 NHibernate AutoFlush 检查如此昂贵?

    在实践中 我们发现默认的 NHibernate v2 0 2 1 FlushMode Auto 非常昂贵 查看 NHibernate 源代码表明 确定需要刷新的内容的算法依赖于循环遍历会话中所有实体的强力 并且这种情况发生在事务中运行的每个
  • 迁移时可以添加级联删除规则吗?

    在 FluentMigrator 迁移中 如果我定义关系 请说 Create Table RelatedTable WithColumn RelatedTableId AsGuid PrimaryKey WithColumn MainTab
  • 把 $$s 放在 `equation` 环境中:为什么 Latex 不抱怨?

    我很惊讶最近的问题中的 Latex 代码没有抛出任何错误 更令我惊讶的是进一步的调查 克劳利的解释 https stackoverflow com questions 2892982 formatting equations in late
  • 将整数转换为 std_logic

    假设你有一个循环 for i in 1 downto 0 loop for j in 1 downto 0 loop tS0 lt i 但我需要将整数 这是自然的 转换为 std logic tS0被声明为 std logic 我只做了一位
  • jQuery keydown 触发器不起作用

    我在文档加载结束时运行此脚本 function input keydown 该脚本位于 chrome 扩展中 该扩展在用户加载的每个页面上运行并且不起作用 即在 Twitter 网站上 但是 如果在 chrome javascript 控制
  • 如何使用javascript从父窗口获取子窗口url

    我正在启动一个带有窗口引用名称的子窗口 我想在每次更改时捕获子窗口的 URL var winRef var url http www google com if winRef null winRef closed winRef window
  • SecurityError:阻止具有来源的框架访问跨来源框架

    我正在加载一个在我的 HTML 页面中 并尝试使用 JavaScript 访问其中的元素 但是当我尝试执行代码时 出现以下错误 SecurityError 阻止源为 http www example com 的框架访问跨源框架 如何访问框架
  • 重置更改的值在其他 Ctrl (AngularJS) 中不起作用

    我对我的问题有点困惑 事实上 我有 2 个正在使用服务的视图和 ctrl 第一个视图包含一个表格列表 其中包含将从 WebAPI 加载的项目 该服务向服务器发出请求并按订单提供 另外 我正在使用另一个服务来传输另一个 Ctrl 中的所选项目