Javascript AngularJS 1.6+;ES6-将jquery ui网格回调数据返回给控制器
我正在控制器中定义一个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
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中的反模式。箭头函数应该完全取代它。答案中的代码是与您发布的代码相同的惯用代码。