Property of $scope is not updated on fetching from SQLite with ngCordova

I'm writing an app with Ionic and the $cordovaSQLite plugin. I have this simple controller

.controller('TopicCtrl', ['$scope', '$stateParams', 'Topic', function($scope, $stateParams, Topic) {
    $scope.topic = null;
    Topic.get($stateParams.topicId).then(function(data) {
        $scope.topic = data;
    });
}]);

for this simple view

<ion-view view-title="{{topic.title}}">
    <ion-content>
    ...
    </ion-content>
</ion-view>

The problem is $scope.topic remains null the first time I display this view (therefore no title for this view is displayed), when I navigate to another view and then press the back button $scope.topic has the fetched data so the topic's title is displayed on the view. Why is $scope.topic not updated as expected?

My services.js looks like this

.factory('SQLiteService', ["$q", "$interval", "$cordovaSQLite", "$ionicPlatform", function($q, $interval, $cordovaSQLite, $ionicPlatform) {
    var self = this;
    self.db = null;

    self.init = function() {
        window.plugins.sqlDB.copy("database.db", function () {
            self.db = window.sqlitePlugin.openDatabase({name: "database.db", bgType: 1, createFromLocation: 1, location: 2});
        }, function (e) {
            self.db = window.sqlitePlugin.openDatabase({name: "database.db", bgType: 1, createFromLocation: 1, location: 2});
        });
    };

    self.query = function(query, bindings) {
        var wrapper = function() {
            bindings = typeof bindings !== 'undefined' ? bindings : [];
            var deferred = $q.defer();

            $ionicPlatform.ready(function () {
                $cordovaSQLite.execute(self.db, query, bindings).then(function(data) {
                    deferred.resolve(data);
                }, function(error) {
                    deferred.reject(error);
                });
            });
            return deferred.promise;
        };

        if (!self.db) {
            var q = $q.defer();
            $interval(function() {
                if (self.db) {
                    q.resolve();
                }
            }, 100, 25);
            return q.promise.then(function() {
                return wrapper();
            });
        }

        return wrapper();
    };

    self.fetch = function(data) {
        return data.rows.item(0);
    };

    return self;
}])
.factory('Topic', ["SQLiteService", function(SQLiteService) {
    var self = this;

    self.get = function(id) {
        var query = "SELECT id, title FROM topics WHERE id = ?";
        return SQLiteService.query(query, [id]).then(function(data) {
            return SQLiteService.fetch(data);
        });
    }

    return self;
}]);