Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/angularjs/20.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 模板不使用';t渲染重新加载的数据:AngularJS_Javascript_Angularjs - Fatal编程技术网

Javascript 模板不使用';t渲染重新加载的数据:AngularJS

Javascript 模板不使用';t渲染重新加载的数据:AngularJS,javascript,angularjs,Javascript,Angularjs,我有两个控制器可以相互通信 控制器1: $scope.$on("reloadUsers", function (event) { $http.get("/users").success(function(data) { $scope.users = data; console.log($scope.users); }); }); $http.get("/users").success(function(da

我有两个控制器可以相互通信

控制器1:

$scope.$on("reloadUsers", function (event) {
        $http.get("/users").success(function(data) {
            $scope.users = data;
            console.log($scope.users);
        });
    });

$http.get("/users").success(function(data) {
    $scope.users = data;
});
控制器2:

$scope.editUser = function(id){
        $http({
            url: "/users/"+ id,
            method: "PUT",
            data: {
                "firstName":$scope.user.firstName,
                "lastName": $scope.user.lastName,
            }
        });

        $scope.$emit("reloadUsers");
}
我的模板如下所示(两个模式对话框):

模板1:

<div class="modal fade" id="myModal" tabindex="-1" role="dialog" aria-labelledby="myModalLabel" aria-hidden="true"  ng-controller="Controller 1">

<div ng-repeat="user in users>
    <a data-toggle="modal" data-target="#configureUserModal" href="#" ng-click="getUserId(user.id)" data-id="user.id">{{user.first_name + ' ' +user.last_name}}</a>
</div>

</div>


我将尝试重写以下代码:

$scope.editUser = function(id){
    $http.put("/users/" + id, 
    {
        firstName: $scope.user.firstName,
        lastName: $scope.user.lastName
    })
    .success(function(){
        $scope.$emit("reloadUsers");
    });
}
希望它能起作用

编辑:

自定义更新方法

angular.module('unknown', ['ngResource'])
.factory('Users', ['$resource', function($resource){
    return $resource('/users/:id', { id:'@id' }, {
      update: { method: 'PUT' },
      get: { method: 'GET' }
    });
}]);

经过大量的重构,我终于找到了答案。首先,我实现了一个服务来获取我的用户列表

angular.module('app').factory('usersService', function($http) {

    var usersService = {
        getUsers: function () {
            return $http.get("/users/").then(function (response) {
                return response.data;
            });
        }
    };

    return usersService;

});
我使用了
then
,因为HTTP GET请求是异步的,但在收到响应数据之前,我无法显示用户列表

然后在
控制器1
中,我添加了以下代码位:

    $scope.users = usersService;

    usersService.getUsers().then(function (asyncUsers) {
        $scope.users = asyncUsers;
    });

    $scope.$watch('users', function (users) {
        if (angular.isDefined(users)) {
            console.log("$scope.users has data");
        }
    });

    $scope.$on("reloadUsers", function (event) {
        usersService.getUsers().then(function (asyncUsers) {
            $scope.users = asyncUsers;
        });
    });
在这里,我基本上只是调用服务并等待
$scope.users
获取它的值。为了准确地找出发生这种情况的时间,我只需要一个
$scope.watch
函数。我还有一个函数,用于等待从
控制器2
发出的
重新加载用户
事件,该事件刷新
$scope.users
中的数据

最后,在控制器2中,我有:

$scope.editUser = function(id){
        $http({
            url: "/user/"+ id,
            method: "PUT",
            data: {
                "firstName": $scope.user.firstName,
                "lastName": $scope.user.lastName,
            }
            }).success (function(data) {
                $scope.$emit("reloadUsers");
        });
    }

只需调用
$scope.emit
,指示是时候刷新了。所以我很确定我的问题是控制器之间缺乏通信,因为我没有使用服务,也没有使用异步GET请求。这个解决方案解决了这两个问题

尝试在http请求的成功方法中发出事件。我认为这是一个异步问题。@RaphaelMüller尝试过,但不幸没有成功。当我在发出后记录
$scope.users
时,它会显示更新的数据!但是它没有出现在
模板1
::当你只调用你的
$http.put()
而不在之后调用
$emit()
时会发生什么?@Kutyel这很尴尬,但即使没有
$emit()
它的工作原理完全相同:/I我应该在
$scope.users上使用
$watch
功能吗?
?谢谢,但当Raphael建议时,我尝试了同样的方法,但没有成功:(啊,你太好了。别抱歉!谢谢你的帮助。我要玩一下
$watch
$digest
,看看这是否管用。嗯,这是个主意。我也要试试。我完全重构了我的代码,使用了你答案中的元素,它终于管用了!还要把我的解决方案放在这里。哈哈,我对它投了高票,所以在你编辑它之前我不能对它投低票。
$scope.editUser = function(id){
        $http({
            url: "/user/"+ id,
            method: "PUT",
            data: {
                "firstName": $scope.user.firstName,
                "lastName": $scope.user.lastName,
            }
            }).success (function(data) {
                $scope.$emit("reloadUsers");
        });
    }