在回调方法中访问控制器 $scope

Accessing controller $scope in callback method

嗨哟!

我将 ROS(机器人操作系统)与 roslib.js 和 angular.js 结合使用。

一个方法正在调用一个服务,这是通过网络完成的,需要一些时间。最好的方法是,这个调用是阻塞的。但事实并非如此。从回调中接收到所需数据,但无法将数据复制到控制器的其他位置。

我认为是Scopes的问题。但是我已经实现了一个用于接收数据的工厂,并尝试使用 $rootScope 进行了一次肮脏的黑客攻击,但没有任何效果...

下面是一些描述性代码:

查看:

这里一个ng-repeat监听控制器rosCtrl

中的变量list

JS:

Controller rosController
  var rosCtrl = this;
  rosCtrl.list = [];

  this.receiveData = function(){
    callService(input, function(result){
      ..
      .. some logging for debugging ..
      rosCtrl.list.push({name: "a", type: 1});
    }
  }

数据已成功接收,我可以使用其他方法将项目添加到列表并更新视图。所以机制上没有任何问题。

希望我能让你理解这个问题。如果没有,请告诉我,所以我会尽量解释得更详细。

提前致谢!

这样的事情怎么样:

http://plnkr.co/edit/jPH4d5RiinxOGuxMjSRr?p=preview

(function(angular) {
  'use strict';
angular.module('scopeExample', [])
  .controller('rosController', ['$scope', function($scope) {
    $scope.list = ['World'];

    $scope.sayHello = function() {

      setTimeout(function callService(){
        $scope.list.push('Another '+Math.random().toString().split('.')[1]);
      },100);
    }
  }]);
})(window.angular);

感谢您的回答。我尝试了你的想法,但它们也没有用。同时我发现了问题:另一个程序员两次添加嵌套在另一个控制器中的同一个控制器,这就是为什么列表的内容一直是​​空的。有时候生活就是这么简单..... Gnarf.....