【问题标题】:$scope inside a callback of a resource get call will not work资源获取调用的回调中的 $scope 将不起作用
【发布时间】:2013-08-04 17:09:01
【问题描述】:

我在访问 $scope 时遇到问题。因为它似乎不适合我。

我有一个资源:

squashApp.factory('CourtsService', function($resource) {
  return $resource('/api/court/:num', {num: '@num'});
});

我的控制器会这样做:

squashApp.controller('CourtsController',
    function CourtsController($scope, $window, $http, CourtsService) {        
        CourtsService.get({num:1}, function(data){
                     $scope.courts = data;
        })

  });

我的服务器成功返回了 javascript 对象 (JSON) 格式的数据。 我已经检查过了。但由于某种原因,$scope 没有更新,在这个回调之后,我的视图根本没有改变。

请帮忙

【问题讨论】:

  • 试试 $scope.$apply();在 $scope.courts = 数据之后;
  • 试过了,还是不行。我将 $apply 添加到我的依赖项列表中只是为了确保这仍然无法正常工作......
  • $apply 不是 Angular 服务;这只是$rootScope的一种方法。
  • 这个怎么样:$scope.courts = CourtsService.get({num:1});
  • 在作业前放一个console.log,你能看到data返回了吗?

标签: javascript node.js angularjs express


【解决方案1】:

我为你创建了一个演示,你的代码看起来不错。

不过,这样的错误发生时,为回调添加一些逻辑总是好的,这样你的应用就不会无声无息地死掉。

squashApp.controller('CourtsController', function CourtsController($scope, $window, $http, CourtsService) {
    CourtsService.get({
        num: 1
    }, function (data) {
        console.log('success');
        $scope.courts = data;
    }, function (data) { // -> error handling
        console.log('failed');
        $scope.courts = data;
    })
});

Demo

【讨论】:

  • 我收到了该数据并且它是正确的,但我的 UI 仍然不会更新。在将数据分配给 scope.courts 之前,我应该对数据做些什么吗?因为似乎无法正确中断范围接收的数据的某些方式
  • 可能与我的服务器发送数据的方式有关? res.send(200, 结果);这是问题吗?我只是不知道该怎么做才能让范围正确接受它
【解决方案2】:

使用 $promise 使用 angular $resource 访问您的 $scope 的简单方法(推荐)

  squashApp.controller('CourtsController',
    function CourtsController($scope,CourtsService) {        
        CourtsService.get({num:1}).$promise.then(function(data){
          //$scope -- can be accessed here
       }, function(failed){
       }
  });

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-02-20
    • 1970-01-01
    • 1970-01-01
    • 2011-09-17
    • 2021-08-05
    • 2021-01-24
    • 2012-08-23
    相关资源
    最近更新 更多