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
Angularjs 如何从$resource.save()触发模型更新?_Angularjs - Fatal编程技术网

Angularjs 如何从$resource.save()触发模型更新?

Angularjs 如何从$resource.save()触发模型更新?,angularjs,Angularjs,我目前正在尝试构建我的第一个angular应用程序,我可能需要一些帮助 我正在使用标准$resource操作访问REST服务: angular.module('wtrack', ['ngResource']). factory('WtrackAPI', function($resource) { var WtrackAPI = $resource('http://hostname/wtrack/api/w/:id'); return WtrackAPI;

我目前正在尝试构建我的第一个angular应用程序,我可能需要一些帮助

我正在使用标准$resource操作访问REST服务:

angular.module('wtrack', ['ngResource']).
    factory('WtrackAPI', function($resource) {
      var WtrackAPI = $resource('http://hostname/wtrack/api/w/:id');
      return WtrackAPI;
    });
这是我的控制器:

function ListCtrl($scope, $timeout, WtrackAPI){

    $scope.wdata = WtrackAPI.query(); // a list of objects displayed in my view

    $scope.addEntry = function() {   // adding an object to the list
        console.log("Adding Entry");
        var entry = {day: $scope.wdata.day, value: $scope.wdata.value};
        WtrackAPI.save(entry, 
                          function(){console.log("WTF do I need to do here to rerun WtrackAPI.query()");});
    };

}

我想做的基本上是通过执行
$scope.wdata=WtrackAPI.query()更新我的模型操作。我怀疑角度的方法是只
$scope.wdata.push(entry)
,但在这种情况下,数据库会使用触发器向条目添加一些数据,并进行一些复杂的排序,因此我确实希望使用query进行往返并重新加载整个列表。我怎样才能做到这一点?只需调用
$scope.wdata=WtrackAPI.query()不起作用,因为其中显然不存在$scope。我用$emit和$rootScope等尝试了一些其他的东西,但所有这些都让我感到困惑。那么,有谁能给我一个提示,告诉我正确的方法是什么吗?

应该可以在闭包范围中访问
$scope
对象,这样您就可以编写:

function ListCtrl($scope, $timeout, WtrackAPI){

    $scope.wdata = WtrackAPI.query(); // a list of objects displayed in my view

    $scope.addEntry = function() {   // adding an object to the list

        var entry = {day: $scope.wdata.day, value: $scope.wdata.value};
        WtrackAPI.save(entry, function() {
           //$scope should be accessible here
           $scope.wdata = WtrackAPI.query();
        });
    };
}

$scope
对象应该可以在闭包范围中访问,以便您能够编写:

function ListCtrl($scope, $timeout, WtrackAPI){

    $scope.wdata = WtrackAPI.query(); // a list of objects displayed in my view

    $scope.addEntry = function() {   // adding an object to the list

        var entry = {day: $scope.wdata.day, value: $scope.wdata.value};
        WtrackAPI.save(entry, function() {
           //$scope should be accessible here
           $scope.wdata = WtrackAPI.query();
        });
    };
}

被接受的答案会让你瞬间看到一个空白模型。我建议对更干净的模型进行以下更新:

function ListCtrl($scope, $timeout, WtrackAPI){
        $scope.queryWData = function() {
            WtrackAPI.query(function(response){
                // set the wdata here, in the callback
                $scope.wdata = response;
            })
        };
        $scope.addEntry = function() {   // adding an object to the list
            console.log("Adding Entry");
            var entry = {day: $scope.wdata.day, value: $scope.wdata.value};
            WtrackAPI.save(entry,
                function(){
                    $scope.queryWData();
                });
        };
        $scope.queryWData();
    }
我建议不要直接将
$scope.wdata
设置为等于
$resource
,因为在该资源响应之前,$scope.wdata将为空。这将导致在模型实际更新之前出现大量空白内容


为了纠正这一点,我们在
$resource
回调中设置
$scope.wdata
,接受的答案将立即显示一个空白模型。我建议对更干净的模型进行以下更新:

function ListCtrl($scope, $timeout, WtrackAPI){
        $scope.queryWData = function() {
            WtrackAPI.query(function(response){
                // set the wdata here, in the callback
                $scope.wdata = response;
            })
        };
        $scope.addEntry = function() {   // adding an object to the list
            console.log("Adding Entry");
            var entry = {day: $scope.wdata.day, value: $scope.wdata.value};
            WtrackAPI.save(entry,
                function(){
                    $scope.queryWData();
                });
        };
        $scope.queryWData();
    }
我建议不要直接将
$scope.wdata
设置为等于
$resource
,因为在该资源响应之前,$scope.wdata将为空。这将导致在模型实际更新之前出现大量空白内容


为了纠正这个问题,我们在
$resource
回调中设置了
$scope.wdata
,是的,现在它工作了,我一定是在其他地方弄糟了什么,很抱歉听到噪音&非常感谢。非常感谢它在类似的问题上帮助了我!是的,现在它工作了,我一定是在别的地方弄糟了什么东西,很抱歉吵闹&非常感谢。非常感谢它在一个类似的问题上帮助了我!第二个请求似乎太过分了。至少在我的RESTAPI中,更新(可能由服务器更改)的对象包含在PUT/POST响应中。至少在我的RESTAPI中,更新(可能由服务器更改)的对象包含在PUT/POST响应中。