2013-03-13 15 views
8

Chrome Packaged Apps mają raczej surową Politykę bezpieczeństwa treści. Jednym ze skutków jest to, że manipulując położeniem (jak kliknięcie na link) powoduje:Routing kątowy bez zmiany lokalizacji

'Can't open same-window link to "chrome-extension://lkjasdfjklbdskjasdfjkhfdshjksad/derp.html"; try target="_blank". ' 

_blank cel będzie otworzyć link w Chrome, która jest nie to, co chcę. Czy routing AngularJS może działać w tak zamkniętym środowisku?

Dokumenty te podają an example aplikacji Angular, ale wyraźnie nie używają routingu.

Aktualizacja

Oto link, który po kliknięciu, daje błąd: <a class='walrus-link' ng-href='paystubs/{{walrus.id}}'>Walrus {{id}}!</a>

+0

Tylko kontrola poprawności: używasz kątowa 1.1.0+ zamiast 1.0.x? Czy możesz opublikować kod dla $ routeProvider, który daje ci kłopoty? – eterps

+0

Tak, jestem najnowszym (1.1.3) – Chris

+0

@eterps Zaktualizowano! – Chris

Odpowiedz

8

Zamiast stosowania href, spróbuj użyć ng przyciskiem myszy i wywołać metodę do kontrolera przenosi się do odpowiednią stronę za pomocą $ location. Zobacz dokumentację na stronie AngularJS site. Poniższy cytat z dokumentu daje wskazanie, że usługa lokalizacja $ może być odpowiedni dla Ciebie:

When should I use $location? Any time your application needs to react to a change in the current URL or if you want to change the current URL in the browser.

Twój kod może wyglądać tak:

<a class='walrus-link' ng-click='getPaystub(walrus.id)'>Walrus {{id}}!</a> 

i kontrolera nadrzędnego, ty” będziesz potrzebował metody zakres o nazwie „getPaystub” z linii podobnej do:

$scope.getPaystub = function(selectedWalrusId) { 
    $location.path('paystubs/'+$scope.walrus.id); 
} 

ten sposób kątowy utrzymuje kontrolę i nie spowoduje odświeżania strony. Miejmy nadzieję, że utrzymasz cię w granicach CSP. Niestety nie mogę tego przetestować w aplikacji w pakiecie, ale użyłem tej samej konwencji w aplikacji internetowej i działa po prostu elegancko.

0

Routing działa dla mnie w mojej aplikacji chrome, gdy nie korzystam z trybu html5 w $ routeProvider (który jest domyślnie wyłączony), wystarczy użyć hasha w adresie URL.

więc moje linki wyglądać następująco:

<a href="#about">About</a> 

konfiguracja $ routeProvider jest następujący:

$routeProvider.when('/about', {templateUrl:'about.html'}) 
Powiązane problemy