23

サードパーティ ライブラリのコールバック関数を備えたサービス:

mbAppModule.service('aService', function ($http) {
    this.data={"somedata":0};
    var m3rdPartLib="init";  // init    
    m3rdPartLib.on('timeupdate', function() {
        this.data.somedata=1;
    });
}

そしてコントローラー

mbAppModule.controller({
    MController: function ($scope, $http, mService) {
        $scope.mService= mService;    
    });
});

htmlページ

{{mService.data.somedata}}

問題 :

m3rdPartLib.on() は、サービスで使用しているサードパーティ ライブラリのコールバック関数です。更新されているので、UIに表示したいと思います。コールバック時に値が変更されていますが、UI には反映されていません。

いくつかのドキュメントを読んで、 $rootScope.$apply を呼び出すことができることがわかりましたが、サービスに $scope / $rootScope の参照がありません。

4

4 に答える 4

0

関数を使用$scope.$watchします。私のjsfiddleを見てください。私はあなたのライブラリを持っていないので、シミュレートするだけです.5秒後に値が0から1に変わります。

于 2013-09-21T11:10:53.150 に答える
0

サービスでスコープを使用している場合は、SRP を壊していることを示す良い指標です。これは、サービスがデータをコントローラーにのみ取得する必要があるためです。私の提案は、あなたがこのようなことをすることができるということです.

mbAppModule.service('aService', ["$http", "$rootScope", function ($http, $rootScope) {
  this.data = {
    "somedata": 0
  };
  var m3rdPartLib = "init"; // init    
  this.GetPartLib = function () { 
    return m3rdPartLib;
  }
}]);

mbAppModule.controller({
  MController: function ($scope, $http, mService) {
  this.GetPartLib = function (){ 
    mService.on('timeupdate', function() {
     this.data.somedata=1;
    });
  }
});
于 2016-02-25T02:48:45.067 に答える