在 onclick 中使用数据绑定 url
using data binding in onclick url
我正在使用这个 cordova plugin to launch external urls in my Ionic App 这是我的代码,运行良好。
<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>
它只是把它打印出来,就好像它是一个字符串一样。我试过使用引号,但是所有的东西要么破坏它,要么打印出一个字符串。
我想你想访问 angular 非 angular html 部分的范围,那么你需要使用 angular.element([=12=]).scope()
来访问范围。
<a class="orange" href="#" onclick="window.open('http://www.myurl/'+ angular.element([=10=]).scope().privacy.policy, '_system', 'location=yes'); return false;">
Privacy Policy</a>
如果您当前的代码在 angular 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>
Here 是我用相同概念制作的 Plunker。我将 onclick 更改为 ng-click 并处理了控制器中的 window 开口。
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>
用户输入一个查询,当 link 被点击时,google 在一个新的 window 中启动,查询在 url 中。
查看 JSFiddle 或要点:
myApp.filter('hrefToJS', function ($sce, $sanitize) {
return function (text) {
var regex = /href="([\S]+)"/g;
var newString = $sanitize(text).replace(regex, "onClick=\"window.open('', '_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,但如果您确实需要,也可以删除这些部分。
我正在使用这个 cordova plugin to launch external urls in my Ionic App 这是我的代码,运行良好。
<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>
它只是把它打印出来,就好像它是一个字符串一样。我试过使用引号,但是所有的东西要么破坏它,要么打印出一个字符串。
我想你想访问 angular 非 angular html 部分的范围,那么你需要使用 angular.element([=12=]).scope()
来访问范围。
<a class="orange" href="#" onclick="window.open('http://www.myurl/'+ angular.element([=10=]).scope().privacy.policy, '_system', 'location=yes'); return false;">
Privacy Policy</a>
如果您当前的代码在 angular 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>
Here 是我用相同概念制作的 Plunker。我将 onclick 更改为 ng-click 并处理了控制器中的 window 开口。
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>
用户输入一个查询,当 link 被点击时,google 在一个新的 window 中启动,查询在 url 中。
查看 JSFiddle 或要点:
myApp.filter('hrefToJS', function ($sce, $sanitize) {
return function (text) {
var regex = /href="([\S]+)"/g;
var newString = $sanitize(text).replace(regex, "onClick=\"window.open('', '_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,但如果您确实需要,也可以删除这些部分。