在回调方法中访问controller $ scope

时间:2016-02-03 21:20:53

标签: javascript angularjs angularjs-scope ros

Heyho!

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

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

在我看来,这是范围的问题。但是我已经实现了一个用于接收数据的工厂并尝试使用$ 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});
    }
  }

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

希望我能帮你理解这个问题。如果没有,请告诉我,所以我会尝试更详细地解释它。

提前谢谢!

2 个答案:

答案 0 :(得分:0)

这样的事情怎么样:

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);

答案 1 :(得分:0)

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