Javascript 如何使用ng click重定向
我正在尝试构建的超级简单的AngularJS应用程序,在两个文本框中接受凭证,然后使用双向绑定在按钮上重定向到包含两个变量的url 我的问题是,我可以让它工作一个简单的时间Javascript 如何使用ng click重定向,javascript,angularjs,Javascript,Angularjs,我正在尝试构建的超级简单的AngularJS应用程序,在两个文本框中接受凭证,然后使用双向绑定在按钮上重定向到包含两个变量的url 我的问题是,我可以让它工作一个简单的时间 <a href=...> 通过给它与我打算用于按钮的类相同的类,文本看起来就像一个按钮,完全相同。在控制器上放置一个方法来执行重定向,并在按钮上的ng单击 标记: <button ng-click="goLogin()">Log in</button> 另请注意,您希望调用$loc
<a href=...>
通过给它与我打算用于按钮的类相同的类,文本看起来就像一个按钮,完全相同。在控制器上放置一个方法来执行重定向,并在按钮上的
ng单击
标记:
<button ng-click="goLogin()">Log in</button>
另请注意,您希望调用$location.url()
而不是path()
或者
将$location
添加到您的作用域并调用url({{newUrl}})
:
我仍然会在作用域上使用调用方法 这里需要注意的几点:
不允许在角度表达式中引用窗口!,因此,尝试在内联ng click
表达式上使用$window.location.href='/url'
,将不起作用
$location
不会自动公开给您的作用域,您需要先将其注入控制器,然后再注入作用域,从而将其公开给视图
.controller('LoginCtrl',函数($scope,$location){
$scope.$loc=$location;
})
值得注意的是,$location.path()
&$location.url()
不会将您重定向到新页面,这是用于路由的,以便路由回调/观察者可以执行此操作。$location服务只允许您更改URL;它不允许您重新加载页面
最好(也是最好的方法)是在控制器的作用域中添加一个方法。当您需要更改URL并重新加载页面或导航到其他页面时,请使用较低级别的API:$window.location.href
使用绑定到控制器的方法:
.controller('LoginCtrl', function($scope, $location) {
$scope.form = {
username: null,
password: null
};
$scope.goLogin = function() {
$location.url('http://test.com/login.jsp?un='+ $scope.form.username +'&pw="+ $scope.form.password);
};
})
$scope.redirect = function(url, refresh) {
if(refresh || $scope.$$phase) {
$window.location.href = url;
} else {
$location.path(url);
$scope.$apply();
}
}
然后从ng单击表达式调用方法:
回家吧!没有人爱你
注意:上述方法要求您将$location
和$window
注入控制器。您也可以使用ng href
<button ng-href="http://example.com/login.jsp?un={{username}}&pw={{password}}" class="btn btn-lg btn-warning">Log In!</button>
登录!
这肯定会起作用
$scope.loadSchedules=函数(){
window.location.href='/Admin/Admin/doctorschedule';
};
**在“ng click”属性中定义一个函数**
确定
您无法使其工作,因为$location
不在范围内,因此无法在您的视图中访问它。是否可以使用任何其他窗口或位置变体?这很奇怪,因为我可以使用onClick使用普通javascript获得重定向,但这并没有提供我的双向绑定。因此,将其更改为ng click,我希望它的行为相同,但具有双向绑定,但它什么都不做。“如果可能,我希望在页面上完成它。”这将是一个糟糕的设计。在控制器中使用一个函数!是的,在一个句点之后,您应该只有一个空格。但当我给两个空格时,这其实并不重要,除非我申请的是一个会在乎的职位。同样地,我理解“最佳实践”会将本应是单页、无控制器的AngularJS示例变成多文件、多文件夹的设置,所有内容都封装在通用函数中,等等。我想了解的是,为什么在这种情况下onClick和ng click的行为有所不同?双向绑定可以在没有控制器的情况下工作,window.open可以在没有角度的情况下工作,为什么两者不能一起工作呢?您应该禁用链接,直到设置了{{username}
和{{password}}
,这样做动态URL时使用ng href
()虽然在这种情况下这可能无关紧要,因为它似乎依赖于用户输入,因此对您没有帮助(即,您需要启用/禁用)。我认为OP知道:“如果我调用控制器中的函数,我可以让它工作”我们能不能直接执行ng click=“$location.path('/edit')”?并在控制器中注入$location service,以便在视图/部分中可以访问位置服务提问者提到“如果我调用控制器中的函数,我可以让它工作”。他正在寻找其他方法
<button ng-click="goLogin()">Log in</button>
.controller('LoginCtrl', function($scope, $location) {
$scope.form = {
username: null,
password: null
};
$scope.goLogin = function() {
$location.url('http://test.com/login.jsp?un='+ $scope.form.username +'&pw="+ $scope.form.password);
};
})
$controller('MyCtrl', function($scope, $location) {
$scope.$location = $location;
})
$scope.redirect = function(url, refresh) {
if(refresh || $scope.$$phase) {
$window.location.href = url;
} else {
$location.path(url);
$scope.$apply();
}
}
<button ng-href="http://example.com/login.jsp?un={{username}}&pw={{password}}" class="btn btn-lg btn-warning">Log In!</button>