2016-08-18 142 views
0

我試圖使用HTML的標籤中打開一個新的模式瀏覽器窗口的URL是通過一個角度值檢索,像這樣:如何在Angular JS中使用href =「javascript:window.open ...」?

<a href="javascript:OpenPopUpPage('{{listing.Linktest}}');">Test Link</a> 

我的角度標記的其餘部分工作得很好,但上述錨點不起作用。在我做出的幾次嘗試中,我根本沒有得到任何值(空),或者生成的URL被標記爲「不安全」。

我試過在我的控制器中調用一個方法來傳回值,但同樣的失敗。

我該怎麼做呢?

注:OpenPopUpPage是內置的,我使用的SharePoint功能,但我也可以同樣調用window.open或別的東西。但我認爲這對這個問題並不重要。

更新:我已經創建了一個jsfiddle(警告,第一次定時器),並試圖在這裏作爲一個演示遵循一些響應,但我無法讓它們中的任何一個正常工作。 My jsfiddle

+0

能否請您做一個小提琴和分享我們檢查你的代碼的鏈接? –

+0

可能我建議不要使用'javascript:'?它會讓事情變得更容易......少一些額外的逃脫去做。 – Brad

回答

0

你有什麼是不正常的鏈接。它更多的是<button>,儘管它可以用任何方式。

處理點擊打開一個新的窗口,然後將角方式:

<button type="button" ng-click="$ctrl.click($event)">...</button> 

,並在您的角度代碼:

function Controller/Copmponent/Directive/Whatever() { 
    this.url = 'http://example.com'; 
    this.click = function() { 
     open(this.url, this.target, this.options); 
    }; 
} 

如果您的網頁需要支持JavaScript禁用,或者如果您根本不在角地,則可以合理使用<a>元素,前提是您要給href一個有效的URL:

<a href="{{$ctrl.url}}" ng-click="$ctrl.click($ctrl.url, $event)">...</a> 
+0

謝謝你的迴應。我試圖在這個jsfiddle中使用你的迴應。你能看到我要去哪裏嗎? http://jsfiddle.net/planetparker28/7z7uttnb/5/ –

+0

@JimParker,[很多小東西](http://jsfiddle.net/xoggxyyn/1/)。 – zzzzBov

+0

感謝代碼示例@zzzzBov。我更喜歡解決方案。但是,我怎樣才能取得這個樣本,並使得URL不是硬編碼到控制器中,而是通過來自我的REST調用的角度值傳遞給控制器​​?我嘗試更新小提琴來展示我的意思,但打破了它:-) –

0
.controller('controllerName', ['$scope', '$window', 
    function($scope, $window) { 
     $scope.redirectToNewPage = function(){ 
      $window.open('https://www.google.com', '_blank'); 
     }; 
    } 
]); 
0

我想添加這個最終的答案,因爲有的則提供打開彈出式窗口或新窗口很好的例子,其主要目標是能夠打開一個新的窗口,這是從傳遞位置角度/ REST查詢值。

答案是兩部分:

1)使用毫微克單擊連同您的控制器來處理新窗口的打開裏面的函數/方法。避免嘗試直接在JavaScript中使用JavaScript。感謝所有爲我貢獻本課的人。 2)另外,當將值傳遞給來自您的控制器查詢輸出的函數時,請勿將{{}}包含在傳遞的值中,顯然這僅用於顯示數據,不傳遞數據。

所以這裏的結果代碼:

//HTML: 
    <button type="button" ng-click="foo(myController.LinkValue)">Let's Do This</button> 

//Code within Controller: 
$scope.foo = function(myURL) { 
    open(myURL, 'popup', 'width=300,height=200'); 
     };