2014-02-10 32 views
4

在angularjs中,您可以禁止在使用時重新加載頁面。Angulardart不應使鏈接重新加載

<a href="" ng-click="..">text</a> 

在angulardart鏈接實際上導航到HREF。這是打算嗎?

的angularjs行爲的goog例子:http://docs.angularjs.org/api/ng.directive:ngHref

<a id="link-1" href ng-click="value = 1">link 1</a> (link, don't reload) 
+0

我一直用錨標記,而不HREF/NG-href屬性時,我想建立一個沒有路線改變一個按鈕測試(以angularJS),在我看來,它也可以在angularDart中正常工作......符合你的行爲要求嗎? – doodeec

+0

@doodeec可以工作,但它會將光標變成文本選擇器而不是非常理想的指針 –

回答

4

EDIT

<a href="#" ng-click="ctrl.clickHandler($event)">text</a> 

import 'dart:html'; 

// ... 

void clickHandler(MouseEvent event) { 
    event.preventDefault(); // suppress default click action 
    event.stopPropagation(); // 
    //event.stopImmediatePropagation(); // optional 

    // do something else 
} 

老答案

我沒有用它自己還沒有,但AngularDart有NgHref指令

https://github.com/angular/angular.dart/blob/master/lib/directive/ng_src_boolean.dart#L60

+0

使用ng-href可以在href內部計算表達式。當使用常規的href時,用戶首先可以點擊{{musthash}}。但在我的情況下,我想一起禁用導航,只需調用ng-click。 – Moritz

+0

我想我現在明白你想要什麼。我更新了我的答案。 –

+0

感謝您的更新。我必須說,解決方案看起來很乏味。另外我不得不使用stopPropagation()。只有使用preventDefault()仍然執行導航。 – Moritz

1

另一種解決方案是使NgRoutingUsePushState這似乎並不妨礙錨鏈接或ng-click。你只需要刪除或您RoutingModule註釋掉以下行:

//bind(NgRoutingUsePushState, toValue: new NgRoutingUsePushState.value(false)); 

要使用你還必須按壓狀態中有你的網絡服務器重寫URL來index.html。它使得在本地開發服務器上運行應用程序變得稍微複雜一些,但是我決定爲它付出努力,因爲我最終需要這個功能並且因爲這個bug。一個例子nginx的配置是:

location/{ 
    # try to serve file directly, fallback to rewrite 
    try_files $uri @rewriteapp; 
} 

location @rewriteapp { 
    # rewrite all to index.html 
    rewrite ^(.+)$ /index.html last; 
} 

注:與角0.13.0

+0

請注意,如果您有嵌套的路由,例如'http:// example.com/category/page',則需要完全引用所有內容。我遇到了一些奇怪的問題,Chrome和Chromium的內存不足,因爲我的組件相對而不是絕對地指定了它的'templateUrl',並且找不到資源。例如我的代碼是'templateUrl:'packages/mypackage/component/mycomponent.html',它應該是'templateUrl:'/ packages/mypackage/component/mycomponent.html' –

相關問題