Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/477.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/angularjs/21.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
Javascript 观察ng内部的变化从不同的控制器重复mongoose更新_Javascript_Angularjs_Node.js_Mongodb_Angularjs Ng Repeat - Fatal编程技术网

Javascript 观察ng内部的变化从不同的控制器重复mongoose更新

Javascript 观察ng内部的变化从不同的控制器重复mongoose更新,javascript,angularjs,node.js,mongodb,angularjs-ng-repeat,Javascript,Angularjs,Node.js,Mongodb,Angularjs Ng Repeat,我遇到了一个非常具体的问题,我想知道有人能帮我解决这个问题 因此,我有一个department控制器,它加载mongodb集合并在一个带有ng repeat的表中显示它。每个文档都有一个“编辑”链接来修改自己。编辑链接打开一个模态框,它是一个不同的控制器。我从模式控制器发出PUT请求,并在服务器上成功更新文档 问题是,一旦我离开模式框,我的页面就会显示旧数据,直到我刷新页面。是否有办法“查看”ng重复区域中的特定文档行。我想确保在从不同控制器执行更新操作后,立即修改特定行。我发现一个已经有效的解

我遇到了一个非常具体的问题,我想知道有人能帮我解决这个问题

因此,我有一个department控制器,它加载mongodb集合并在一个带有ng repeat的表中显示它。每个文档都有一个“编辑”链接来修改自己。编辑链接打开一个模态框,它是一个不同的控制器。我从模式控制器发出PUT请求,并在服务器上成功更新文档

问题是,一旦我离开模式框,我的页面就会显示旧数据,直到我刷新页面。是否有办法“查看”ng重复区域中的特定文档行。我想确保在从不同控制器执行更新操作后,立即修改特定行。我发现一个已经有效的解决方案是重新加载整个页面和控制器(这样整个集合将使用GET重新加载,但这将使用额外的资源,而且似乎不是解决问题的正确方法)

以下是简化的代码(我已经对我认为应该发生更改的地方进行了注释):

department.html:

<tr dir-paginate="department in departments">
    <td>{{department.id}}</td>
    <td>{{department.name}}</td>
    <td>{{department.office}}</td>
    <td>{{department.phone}}</td>        
    <td> <a href="#" ng-Click="modifyDept(department)"> Edit </a> </td>
</tr
“partials/deptModal.html”的modalController:

$scope.newID = angular.copy(depID);
$scope.cancel = function () {
    $uibModalInstance.dismiss('cancel');
  };

$scope.modify = function () {
    $http({
            method: 'PUT',
            url: '/departments',
            headers: {
                'Content-Type': 'application/json'
            },
            data: {
                newID: $scope.newID
            }

        }).success(function(data, status, headers, config) {
            $uibModalInstance.dismiss('cancel');
             if (status === 200) {
             // I believe something could also be done here to notify the parent controller (departmentController) maybe via a service?
               notificationFactory.info("Successfully updated: "+$scope.newID.name)
            }
        })
        .error(function(data, status, headers, config) {
        $uibModalInstance.dismiss('cancel');
        notificationFactory.error("Error: Status Code "+status+". Contact admin if issue persists.")
        });
  };

这是我第一次与angular合作,我有一种预感,我应该使用$watch&一个工厂/服务,但只是不知道如何。。任何暗示或建议都将不胜感激

将scope:$scope添加到department contoller中$uibModal.open方法中传递的选项中

部门总监:

$http({
            method: 'GET',
            url: '/departments'

        }).success(function(data, status, headers, config) {
             $scope.departments = data;
        })
        .error(function(data, status, headers, config) {
             console.log(" Not Doneee "+ status+data+headers+config);
        });

//I was wondering if I could set up a watch in modifyDept?? The modalInstance however creates a new modal with separate controller.
 $scope.modifyDept = function (depID){
 var modalInstance = $uibModal.open({
      templateUrl: 'partials/deptModal.html',
      controller: 'deptModalController',
      resolve: {
        depID: function () {
          return depID;
        }
      }
    });
};
$scope.modifyDept = function (depID){
 var modalInstance = $uibModal.open({
      templateUrl: 'partials/deptModal.html',
      controller: 'deptModalController',
      scope: $scope,
      resolve: {
        depID: function () {
          return depID;
        }
      }
    });
};

现在,您可以在modalController中访问departmentController的范围。在$scope.modify方法中的success回调中,您可以使用新值更新$scope.departments中的部门。

在angularjs上对深度副本和浅层副本进行了一些阅读,并通过引用和值传递后,我能够修复我的问题。谢谢你的帮助!