Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/387.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 如何使用ng click重定向_Javascript_Angularjs - Fatal编程技术网

Javascript 如何使用ng click重定向

Javascript 如何使用ng click重定向,javascript,angularjs,Javascript,Angularjs,我正在尝试构建的超级简单的AngularJS应用程序,在两个文本框中接受凭证,然后使用双向绑定在按钮上重定向到包含两个变量的url 我的问题是,我可以让它工作一个简单的时间 <a href=...> 通过给它与我打算用于按钮的类相同的类,文本看起来就像一个按钮,完全相同。在控制器上放置一个方法来执行重定向,并在按钮上的ng单击 标记: <button ng-click="goLogin()">Log in</button> 另请注意,您希望调用$loc

我正在尝试构建的超级简单的AngularJS应用程序,在两个文本框中接受凭证,然后使用双向绑定在按钮上重定向到包含两个变量的url

我的问题是,我可以让它工作一个简单的时间

<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>