4

onesignal プッシュ通知サーバーから送信された通知をユーザーが押すたびに、アプリを自動的に更新して API から最新のデータを取得する必要があります。以下は私のサンプル コードです。App.js からコントローラ関数を dorefresh() に呼び出すのに問題があります。または、最新のデータを取得できる他の回避策はありますか?

App.js

angular.module('starter', ['ionic','starter.controllers'])

.run(function($ionicPlatform, $rootScope) {
$ionicPlatform.ready(function() {    
// Enable to debug issues.
// window.plugins.OneSignal.setLogLevel({logLevel: 4, visualLevel: 4});

var notificationOpenedCallback = function(jsonData) {
    //alert("Notification received:\n" + JSON.stringify(jsonData));
    //console.log('didReceiveRemoteNotificationCallBack: ' + JSON.stringify(jsonData));
    $rootScope.openedFromNotification = true;
    alert($rootScope.openedFromNotification);
    $ionicHistory.clearCache();
    $window.location.reload(true);
};


// Update with your OneSignal AppId and googleProjectNumber before running.
window.plugins.OneSignal.init("xxxxxxxxxxxxxxxx",
                               {googleProjectNumber: "xxxxxxxxxxxxxx"},
                                notificationOpenedCallback);                                
  });
})

Controller.js

angular.module('starter.controllers',['ionic'])
.controller('MainCtrl', function($scope, $rootScope, $http) {
$http.get("localhost/test/getitem.php")
.success(function (response) 
{
    $scope.items = response;
}); 

$scope.doRefresh = function() {

    console.log("Refreshing!");
    $http.get("localhost/test/getitem.php")
    .success(function(response) {
        $scope.items = formatData(response);
    })
    .finally(function() {
        $scope.$broadcast('scroll.refreshComplete')
    })

};

索引.html

<ion-refresher pulling-text="Pull to refresh" on-refresh="doRefresh()">               
    </ion-refresher>
    <div class="item">
            <h2 style="text-align:center; font-size:25px; font-weight:">{{item.name}}</h2>
    </div>
4

1 に答える 1

3

でイベントをブロードキャストできますnotificationOpenedCallback

var notificationOpenedCallback = function(jsonData) {
    //alert("Notification received:\n" + JSON.stringify(jsonData));
    //console.log('didReceiveRemoteNotificationCallBack: ' + JSON.stringify(jsonData));
    $rootScope.openedFromNotification = true;
    alert($rootScope.openedFromNotification);
    // $ionicHistory.clearCache();
    // $window.location.reload(true);
    $rootScope.$broadcast('app:notification', {refresh: true});
};

ご覧のとおり、カスタム イベントapp:notificationを作成し、 を使用してそれを子スコープ$rootScopeにブロードキャストしました ( )。 受信者が使用できる情報を含むオブジェクトを添付しました。$broadcast

$scope.$onコントローラーで、更新関数を使用してイベントをインターセプトし、呼び出すことができます。

angular.module('starter.controllers',['ionic'])

.controller('MainCtrl', function($scope, $rootScope, $http) {

    $scope.$on('app:notification', function(event, data) {
        console.log(data);
        if (data.refresh)
        {
            $scope.doRefresh();
        }
    });
});

ノート:

ここでキャッシュを消去する必要はありません$ionicHistory.clearCache();

于 2015-08-18T11:53:40.577 に答える