をコントローラには下記された縮小さ例jqueryのUIグリッドコールバックデータを返す:アイデアがあるAngularJS 1.6 + ES6 - 、私は私のコントローラ内の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
キーワードを使用して直接、そうすることはできませんよ。
他の回答は、同じを達成するために$scope
オブジェクトを使用することをお勧めしますが、私はそうすることはできません。
関数の呼び出しに必要なもの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
}
}
これは(自分で 'receiver'を呼び出します)、または' self'変数に 'this'を保存します(https://stackoverflow.com/questions/3309516/wh en-to-use-self-in-javascript)を使用します。 – Adelin
それはうまくいった。ありがとうございました –
ブラウザのコンソールで変更が表示されている間、私はUI上でcallbackHandlerによる変更を伝播できません。 '$ doCheck()'ライフサイクルフックを手動で反映させるために手動でコールしようとしていますが、違いはありません。どのライフサイクルフックがこの変更をUIに伝達できますか? –