Как выполнить код один раз в начале приложения Angular

0

У меня есть ситуация, когда мне нужно, чтобы часть кода выполнялась только один раз в начале углового приложения. Мое приложение ищет маяк, используя плагин cordova, и, если он его найдет, приложение перенаправляется в другое состояние, иначе оно останется в состоянии home/splash.

В настоящее время у меня этот код работает в "домашнем" контроллере, и он работает, но я надеялся на более элегантное решение. Я контролирую изменение состояния, используя простой оператор if/else и переменную в области $scope.

Здесь мой контроллер:

homeCtrl.$inject = ['$scope', '$state', '$rootScope', '$ionicPlatform', '$cordovaBeacon'];
function homeCtrl($scope, $state, $rootScope, $ionicPlatform, $cordovaBeacon) {

    $scope.skip = false;        
    $ionicPlatform.ready(function() {

        $cordovaBeacon.requestWhenInUseAuthorization();

        $rootScope.$on("$cordovaBeacon:didRangeBeaconsInRegion", function(event, pluginResult) {
            if (!$scope.skip) {
                $scope.skip = true;
                $state.go('app.beacon');
            }
        });           

        $cordovaBeacon.startRangingBeaconsInRegion($cordovaBeacon.createBeaconRegion("abcdefg", "8484848484848484848"));
    });
}

Заранее спасибо за помощь.

  • 0
    @Manu документ был готов задолго до запуска контроллера в вашем демо. Angular не загружается до готовности
Теги:
ionic-framework
cordova
cordova-plugins

2 ответа

1

Использовать Run

app.run(function('$scope', '$state', '$rootScope', '$ionicPlatform', '$cordovaBeacon'){
function homeCtrl($scope, $state, $rootScope, $ionicPlatform, $cordovaBeacon) {

$scope.skip = false;        
$ionicPlatform.ready(function() {

    $cordovaBeacon.requestWhenInUseAuthorization();

    $rootScope.$on("$cordovaBeacon:didRangeBeaconsInRegion", function(event, pluginResult) {
        if (!$scope.skip) {
            $scope.skip = true;
            $state.go('app.beacon');
        }
    });           

    $cordovaBeacon.startRangingBeaconsInRegion($cordovaBeacon.createBeaconRegion("abcdefg", "8484848484848484848"));
});

Запуск будет выполнен первым, прежде чем какой-либо контроллер будет загружен или какая-либо услуга будет введена.

-2

ngInit - это то, что вам нужно в вашем случае

Если вы определяете app или controller вы можете указать способ, который вы хотите выполнить в начале вашего приложения, только один раз в атрибуте ng-init.

<!DOCTYPE html>
<html>
<script src="/angular.min.js"></script>
<body>

<div ng-app="" ng-init="myText='Hello World!'">

<h1>{{myText}}</h1>

<p>The ng-init directive has created an AngularJS variable, which you can use in the application.</p>

</div>

</body>
</html>
источник

Однако в угловых документах строго указано, что вы не должны использовать ngInit для целей инициализации. (см. документы)

Эту директиву можно злоупотреблять, чтобы добавить ненужные суммы логики в ваши шаблоны. Существует только несколько подходящих применений ngInit, например, для наложения специальных свойств ngRepeat, как показано в демонстрации ниже; и для ввода данных через серверные скрипты. Помимо этих нескольких случаев, вы должны использовать контроллеры вместо ngInit для инициализации значений в области.

Инициализация значений - это то, что должно быть сделано от контроллера. (см. документы)

Используйте контроллеры для:

Задайте начальное состояние объекта $ scope. Добавить поведение объекта $ scope.

  • 0
    это не то, что ng-init предназначен для использования ... документы ясно об этом. Зачем вам нужен вид, чтобы управлять этим в первую очередь?

Ещё вопросы

Сообщество Overcoder
Наверх
Меню