2015-04-26 78 views
2

我正在使用此cordova plugin在我的Ionic App中啓動外部網址,這是我的代碼運行良好。在onclick url中使用數據綁定

<a class="orange" href="#" onclick="window.open('http://www.myurl/privacy-policy', '_system', 'location=yes'); return false;">Privacy Policy</a> 

但是我想在URL中使用數據綁定。

如何能夠做到以下幾點:

<a class="orange" href="#" onclick="window.open('http://www.myurl/{{privacy.policy}}', '_system', 'location=yes'); return false;">Privacy Policy</a> 

它只是打印出來,如果它是一個字符串。我試着玩引號,但是一切都會打破它或者打印出一串字符串。

回答

2

Here是Plunker我有相同的概念提出。我將onclick改爲ng-click並處理了控制器中的窗口。

app.js:

var app = angular.module('plunker', []); 

app.controller('mainCtrl', function($scope, $http) { 

    $scope.getWindow = function() { 
     window.open('https://www.google.com/search?q='+ $scope.input.search, '_system', 'location=yes'); 
    } 
}); 

的index.html:

<body ng-controller="mainCtrl"> 
    <input type="text" ng-model="input.search" /> 

    <p><a class="orange" href ng-click="getWindow()">Open Google</a></p> 
</body> 

在查詢的用戶類型,並單擊鏈接時,谷歌是一個新的窗口中啓動與查詢在網址中。

+0

忽略$ http模塊,這是不必要的,我忘了刪除它。你也有你的代碼href =「#」。使用錨來定義href(因爲大多數webdevs已經習慣了)可以並且會混淆Angular路由。改爲使用href。 –

+1

這是一個絕對的對待 - 非常感謝! – Taylorsuk

1

我想你想訪問的角度範圍形式非角度的HTML部分,那麼你需要使用angular.element($0).scope()這將讓你訪問的範圍。

<a class="orange" href="#" onclick="window.open('http://www.myurl/'+ angular.element($0).scope().privacy.policy, '_system', 'location=yes'); return false;"> 
Privacy Policy</a> 

如果您當前的代碼是在角JS的不使用ng-click代替onclick

<a class="orange" href="#" ng-click="window.open('http://www.myurl/'+ privacy.policy, '_system', 'location=yes'); return false;"> 
Privacy Policy</a> 
+0

獲取'Uncaught ReferenceError:$ 0未定義' – Taylorsuk

+0

@Taylorsuk您是否嘗試過答案 –

0

見的jsfiddle或要點:


myApp.filter('hrefToJS', function ($sce, $sanitize) { 
    return function (text) { 
     var regex = /href="([\S]+)"/g; 
     var newString = $sanitize(text).replace(regex, "onClick=\"window.open('$1', '_blank', 'location=yes')\""); 
     return $sce.trustAsHtml(newString); 
    } 
}); 

在你的HTML模板:

<div ng-app="myApp"> 
    <div ng-controller="MyCtrl"> 
     <h1>Before</h1> 

     <p ng-bind-html="html"></p> 
     <p ng-bind-html="plaintext"></p> 
     <h1>After</h1> 

     <p ng-bind-html="html | hrefToJS"></p> 
     <p ng-bind-html="plaintext | linky | hrefToJS"></p> 
    </div> 
</div> 

你綁定到數據範圍:

myApp.controller('MyCtrl', function ($scope) { 
    $scope.html = "This a link: <a href='https://www.google.com'>Google</a> :)"; 
    $scope.plaintext = "This is a link: https://www.google.com :) " 
}); 

您需要包括ngSanitize這一點,但你也可以切出這些章節,如果你真的想。