angular.js не работает с тегом ng-view в PhoneGap

Я пытаюсь использовать angular.js с PhoneGap. Он отлично работает в браузере Chrome. Но он не работает
в теге ng-view. И угловой модуль не вызывается, когда я запускаю его на симуляторе. Есть ли у вас какие-либо идеи?

Мой код такой.

index.html

   <body>
        <div class="app" >
            <h1>Welcome!</h1>
            <div id="deviceready">
                            <div ng-view></div>
            </div>
        </div>

        <script type="text/javascript" src="cordova-2.0.0.js"></script>
        <script type="text/javascript" src="js/index.js"></script>


        <script type="text/javascript">
            app.initialize();
        </script>
                <script src="http:////cdnjs.cloudflare.com/ajax/libs/zepto/1.0rc1/zepto.min.js"></script>
                <script src="http://ajax.googleapis.com/ajax/libs/angularjs/1.0.2/angular.min.js"> </script>
                <script type="text/javascript" src="js/router.js"></script>

    </body>

index.js

var app = {
    initialize: function() {
        this.bind();
    },
    bind: function() {
        document.addEventListener('deviceready', this.deviceready, false);
    },
    deviceready: function() {
        // note that this is an event handler so the scope is that of the event
        // so we need to call app.report(), and not this.report()
        app.report('deviceready');
    },
    report: function(id) { 
        console.log("report:" + id);
        // hide the .pending <p> and show the .complete <p>
        document.querySelector('#' + id + ' .pending').className += ' hide';
        var completeElem = document.querySelector('#' + id + ' .complete');
        completeElem.className = completeElem.className.split('hide').join('');
    }
};

router.js

angular.module("app",[]).
    config(["$routeProvider",function($routeProvider){
        $routeProvider.when("/",{templateUrl:"templates/home.html"});
    }]);

person nobinobiru    schedule 15.09.2012    source источник


Ответы (3)


Попробуйте метод bootstrap API, чтобы вручную запустить приложение на deviceReady. что-то вроде:

function onDeviceReady() {
    ...
    angular.bootstrap(document, ['ngView']);
    ...
}

document.addEventListener("deviceready", onDeviceReady, true);

http://docs.angularjs.org/api/angular.bootstrap

person Dve    schedule 30.09.2012
comment
Та же проблема, добавлена ​​строка. но все же браузер Ripple - Nexus застрял. ничего не приходит. Что-нибудь еще мне нужно сделать? - person Keval Patel; 13.03.2016

Попробуйте загрузить файлы angularjs и zepto с этих серверов и поместить их в приложение.

person mccraveiro    schedule 28.09.2012

Я только что потратил, может быть, 5 часов, пытаясь обойти аналогичную проблему. Оказалось, что phone-gap / cca по какой-то причине добавлял идентификатор приложения к хеш-части URL-адреса. Таким образом, маршрут не совпадал, и пользователь постоянно переадресовывался обратно вызовом $routeProvider.otherwise().

(С тех пор я обнаружил, что это известная проблема с CCA, которая даже исправлено просто не выпущено!)

В любом случае, если у вас возникли проблемы с работой ngRoute с mobile-chrome-tools и Phonegap, попробуйте добавить две необязательные совпадающие группы к вашим маршрутам в качестве обходного пути. Например, возьмем этот пример:

$routeProvider.when('/', { templateUrl: 'templates/home.html', controller: 'HomeCtrl' });
$routeProvider.when('/some-page', { templateUrl: 'templates/some-page.html', controller: 'SomePageCtrl' });
$routeProvider.when('/another-page', { templateUrl: 'templates/another-page.html', controller: 'AnotherPageCtrl' });
$routeProvider.otherwise({ redirectTo: '/' });

Маршруты не будут соответствовать дополнительным битам, добавляемым к URL-адресу, но вы можете обойти это следующим образом:

$routeProvider.when('/:a?/:b?/some-page', { templateUrl: 'templates/some-page.html', controller: 'SomePageCtrl' });
$routeProvider.when('/:a?/:b?/another-page', { templateUrl: 'templates/another-page.html', controller: 'AnotherPageCtrl' });
$routeProvider.when('/:a?/:b?/', { templateUrl: 'templates/home.html', controller: 'HomeCtrl' });
$routeProvider.otherwise({ redirectTo: '/' });

Обратите внимание на две необязательные группы, которые я добавил. Также обратите внимание, что базовый маршрут идет последним - в противном случае он будет соответствовать всем / большинству маршрутов, если URL-адрес сгенерирован правильно!

person kzar    schedule 27.03.2014