Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/451.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 AngularJS 1.6+;ES6-将jquery ui网格回调数据返回给控制器_Javascript_Jquery_Angularjs_Angularjs Scope - Fatal编程技术网

Javascript AngularJS 1.6+;ES6-将jquery ui网格回调数据返回给控制器

Javascript AngularJS 1.6+;ES6-将jquery ui网格回调数据返回给控制器,javascript,jquery,angularjs,angularjs-scope,Javascript,Jquery,Angularjs,Angularjs Scope,我正在控制器中定义一个jquery ui网格组件,其缩小示例如下所示: class myController { constructor($scope) { this.$scope = $scope; this.Grid = { selectionSettings:{ clientHandler:function(k

我正在控制器中定义一个jquery ui网格组件,其缩小示例如下所示:

class myController {
    constructor($scope) {        

        this.$scope = $scope; 

        this.Grid = {                               

            selectionSettings:{
                clientHandler:function(key,object,data){
                    console.log(key);
                    console.log(object);
                    console.log(data);                    
                    console.log(this);
                    return data;                        
                    //the scope of this function is different from the controller scope.                          
                    }              
           }
       }

       receiver(data){
             doSomething(data);
       }
    ...
其思想是,当我在网格中选择一个条目时,clientHandler中的函数被激发。然后,我希望此函数将该数据传递给此类中的接收器函数

但是由于这个
clientHandler
函数和
receiver()
在不同的范围内,所以我不能直接使用
this
关键字

关于stackoverflow的其他答案建议使用
$scope
对象来完成同样的任务,但我不能这样做

进行
clientHandler
函数调用
receiver()
需要什么


欢迎任何指导。谢谢

谢谢阿德林的提醒

以下是最终工作代码:

class dashboardController {
    constructor(dashboardService, $scope) {
        this.$scope = $scope;      

        var self = this;

        this.Grid = {

            selectionSettings:{                
               clientHandler:function(key,object,data){
                   self.receiver(data);                 
            }                
        }

        receiver(data){
             this.selected = data;
             this.$scope.$apply(); //to propagate the change to the UI, if needed
         }

   }

ES6箭头函数的存在是为了提供词法
this
和避免
self=this
技巧,这在ES6中通常是不必要的:

clientHandler: (key,object,data) => {
  this.receiver(data);   
}  

要么(自己打电话给接受者)要么。那就行了。谢谢虽然我可以在浏览器控制台上看到更改,但我无法在UI上传播callbackHandler引起的更改。我试图手动调用
$doCheck()
生命周期钩子来反映相同的情况,但没有任何区别。哪个生命周期钩子可以将此更改传播到UI?我尝试了这个-不起作用。无论如何谢谢
var self=这是ES6中的反模式。箭头函数应该完全取代它。答案中的代码是与您发布的代码相同的惯用代码。