【发布时间】:2013-12-04 16:08:26
【问题描述】:
有没有办法告诉 AngularJS 我希望在用户点击链接时在新窗口中打开它们?
使用 jQuery 我会这样做:
jQuery("a.openInNewWindow").click( function() {
window.open(this.href);
return false;
})
AngularJS 有没有等价物?
【问题讨论】:
标签: javascript angularjs
有没有办法告诉 AngularJS 我希望在用户点击链接时在新窗口中打开它们?
使用 jQuery 我会这样做:
jQuery("a.openInNewWindow").click( function() {
window.open(this.href);
return false;
})
AngularJS 有没有等价物?
【问题讨论】:
标签: javascript angularjs
我浏览了很多链接,但这个答案对我帮助很大:
$scope.redirectPage = function (data) {
$window.open(data, "popup", "width=1000,height=700,left=300,top=200");
};
** 数据将是您点击的绝对网址。
【讨论】:
这是你的按钮的代码
<a href="AddNewUserAdmin"
class="btn btn-info "
ng-click="showaddnewuserpage()">
<span class="glyphicon glyphicon-plus-sign"></span> Add User</a>
在控制器中只需添加此功能。
var app = angular.module('userAPP', []);
app.controller('useraddcontroller', function ($scope, $http, $window) {
$scope.showaddnewuserpage = function () {
$window.location.href = ('/AddNewUserAdmin');
}
});
【讨论】:
它对我有用。
将$window 服务注入您的控制器。
$window.open("somepath/", "_blank")
【讨论】:
你可以使用:
$window.open(url, windowName, attributes);
【讨论】:
jQuery(..)thinking 转换为 ng.
我写了一个小要点,我认为它对任何寻求解决该问题的人都非常有帮助:external link
它的作用是将target="_blank" 属性添加到将链接到与当前域不同的域的锚元素。
您可以将其修补为您认为合适的任何内容。
【讨论】:
@m59 指令适用于 ng-bind-html,您只需等待 $viewContentLoaded 完成
app.directive('targetBlank', function($timeout) {
return function($scope, element) {
$scope.initializeTarget = function() {
return $scope.$on('$viewContentLoaded', $timeout(function() {
var elems;
elems = element.prop('tagName') === 'A' ? element : element.find('a');
elems.attr('target', '_blank');
}));
};
return $scope.initializeTarget();
};
});
【讨论】:
这是一个指令,它将target="_blank" 添加到所有具有href 属性的<a> 标记。这意味着它们都将在新窗口中打开。请记住,指令在 Angular 中用于任何 dom 操作/行为。 Live demo (click).
app.directive('href', function() {
return {
compile: function(element) {
element.attr('target', '_blank');
}
};
});
这是相同的概念,侵入性更小(因此不会影响所有链接)且适应性更强。您可以在父元素上使用它以使其影响所有子链接。 Live demo (click).
app.directive('targetBlank', function() {
return {
compile: function(element) {
var elems = (element.prop("tagName") === 'A') ? element : element.find('a');
elems.attr("target", "_blank");
}
};
});
您似乎只会在您的<a> 标签上使用"target="_blank"。这里有两种方法:
<a href="//facebook.com" target="_blank">Facebook</a>
<button ng-click="foo()">Facebook</button>
JavaScript:
var app = angular.module('myApp', []);
app.controller('myCtrl', function($scope, $window) {
$scope.foo = function() {
$window.open('//facebook.com');
};
});
这是$window 的文档:http://docs.angularjs.org/api/ng.$window
你可以只使用window,但最好使用依赖注入,传入 angular 的$window 用于测试目的。
【讨论】:
ng-bind-html插入的html上工作?
$timeout(function() { $('.content a').attr('target', '_blank') }, 0)
$http 承诺联系起来?
ui-router。