GVKun编程网logo

在AngularJS中$ location.path不会在工厂中更改(angularjs stateprovider)

12

在本文中,我们将带你了解在AngularJS中$location.path不会在工厂中更改在这篇文章中,我们将为您详细介绍在AngularJS中$location.path不会在工厂中更改的方方面面,

在本文中,我们将带你了解在AngularJS中$ location.path不会在工厂中更改在这篇文章中,我们将为您详细介绍在AngularJS中$ location.path不会在工厂中更改的方方面面,并解答angularjs stateprovider常见的疑惑,同时我们还将给您一些技巧,以帮助您实现更有效的$location.path()vs $location.hash()in angularjs、AngularJS $ location不更改路径、angularjs $location、AngularJS $location.path(‘/’)不清除search()参数

本文目录一览:

在AngularJS中$ location.path不会在工厂中更改(angularjs stateprovider)

在AngularJS中$ location.path不会在工厂中更改(angularjs stateprovider)

我的工厂看起来像:

''use strict'';angular.module(''myApp'')  .factory(''httpInterceptor'',[''$q'',''$location'', ''$rootScope'', function($q, $location, $rootScope){    return {      response: function(response) {        if(response.success === false) {console.log("Redirecting");            $location.path(''/login'');            return $q.reject(response);        }        return response || $q.when(response);      }    }}]);

它吐出日志,但不更改路径。我该怎么做才能做到这一点?

答案1

小编典典

$
location的文档说:

请注意,设置员不会立即更新window.location。而是$ location服务知道作用域的生命周期,并在作用域$ digest阶段将多个$
location突变合并为一个“ commit”到window.location对象。

因此,如果拒绝诺言对产生影响$location,那么您可能看不到预期的更改。

要强制在角度生命周期之外进行更改,可以设置hash用法window.location,然后强制重新加载页面。当然,这将停止执行随后执行的任何代码并清除会话,但是如果用户未登录,这可能就是您想要的。

$location.path()vs $location.hash()in angularjs

$location.path()vs $location.hash()in angularjs

如果我现在的URL是:xzy.com/#/home/new

$location.hash()给出了home / new,$location.path也给了home / new

>两者有什么区别?
>如果在home / new的控制器内部,我写$location.hash(“#/ home / new”)或$location.path(“/ home / new”)都不会重新加载partial,但是如果我做location.href =“#/ home / new”,它重新加载partial.为什么是这样?

另外,如果在部分内部存在< a href =“#/ home / new”>这也将重新加载部分.
为什么不设置路径/哈希重新加载部分?

路线有两个部分.

第一个“哈希”确实只是为了浏览器的兼容性,如果您使用HTML5模式,则不会显示.

例如,给定此URL:

http://localhost/spa.htm

如果你设置:

$location.path('/myPath');

你会得到:

http://localhost/spa.htm#/myPath

在这种情况下,“哈希”只是为浏览器保存的URL,方法是路径.注意,当您调用路径时,不需要先前/添加,即’myPath’成为’/ myPath’.

如果你随后设置:

$location.hash('myHash');

你会得到:

http://localhost/spa.htm#/myPath#myHash

最后,假设你没有先设置路径,那么你会得到:

http://locahost/spa.htm#/#myHash

如果您使用的是HTML5模式,则不附加初始散列的路径将被追加.

第一个哈希用于附加路由,第二个是对页面上的内容的引用.例如,如果您使用$anchorScroll服务,它将对$location.hash()中放置的内容进行响应,而不在$location.path()中.

总结:

http://localhost/spa.htm#{path}#{hash}

AngularJS $ location不更改路径

AngularJS $ location不更改路径

提交表单后,更改页面的URL时遇到问题。

这是我的应用程序的流程:

  1. 设置了路由,URL被识别到某个表单页面。
  2. 页面加载,控制器设置变量,指令被触发。
  3. 触发一个特殊格式指令,该指令使用AJAX执行特殊格式提交。
  4. 执行完AJAX之后(Angular不会处理AJAX),则触发回调,并且该指令调用$scope.onAfterSubmit设置位置的函数。

问题在于设置位置后什么也没发生。我也尝试过将位置参数设置/为……不。我也尝试过不提交表格。什么都没有。

我已经测试过,看看代码是否达到了onAfterSubmit功能(确实如此)。

我唯一的想法是(因为它是从指令调用的)以某种方式更改了函数的作用域,但是onAfterSubmit如果作用域更改了,又如何调用呢?

这是我的代码

var Ctrl = function($scope,$location,$http) {
  $http.get('/resources/' + $params.id + '/edit.json').success(function(data) {
    $scope.resource = data;
  });

  $scope.onAfterSubmit = function() {
    $location.path('/').replace();
  };
}
Ctrl.$inject = ['$scope','$location','$http'];

有人可以帮我吗?

angularjs $location

angularjs $location

一. 获取url的相关方法:

'http://localhost/$location/21.1%20$location.html#/foo?name=bunny#myhash'这个路径为例:

1.获取当前完整的url路径:

$location.absUrl():
// http://localhost/$location/21.1%20$location.html#/foo?name=bunny#myhash

*2. 获取当前url路径(当前url#后面的内容,包括参数和哈希值):

$location.url();
// /foo?name=bunny#myhash

*3. 获取当前url的子路径(也就是当前url#后面的内容,不包括参数):

$location.path()
// /foo

4. 获取当前url的协议(比如http,https)

$location.protocol()
// http

5. 获取当前url的主机名

$location.host()
// localhost

6. 获取当前url的端口

$location.port()
// 80 (这里就是wamp的默认端口号)

*7. 获取当前url的哈希值

$location.hash()
// myhash

*8. 获取当前url的参数的序列化json对象

$location.search()
// {"name":"bunny"}

二. 修改url的相关方法:

在上面讲到的所有获取url的8个方法,其中*开头的四个方法,可以传入参数进行修改url,在这种情况下,函数的返回值都是$location本身:

1.修改url的子路径(也就是当前url#后面的内容,不包括参数):

参数格式:字符串

$location.url('/foo2?name=bunny2&age=12#myhash2');
// http://localhost/$location/21.1%20$location.html#/foo2?name=bunny2&age=12#myhash2

2. 修改url的子路径部分(也就是当前url#后面的内容,245)">$location.path('/foo2/foo3');
/foo2/foo3/?name=bunny2&age=12#myhash2

AngularJS $location.path(‘/’)不清除search()参数

AngularJS $location.path(‘/’)不清除search()参数

我在用

$location.path('/login');

如果用户未登录,则重定向回登录页面,或者通常使用此方法在任何地方重定向.但是,如果我已经有一个看起来像这样的网址

/注册/最后的步?标记= mF6xY2cQvB9Vccb0J1l5uTu4H10lWkkf

并重定向到

$location.path( ‘/’);

那么搜索参数不会被清除,所以我得到这样的网址

/?标记= mF6xY2cQvB9Vccb0J1l5uTu4H10lWkkf

即使我使用UI-Router

$state.go('home');

?令牌= mF6xY2cQvB9Vccb0J1l5uTu4H10lWkkf

部分仍在那里.

我不明白.每次我需要去另一个州或网址时,我是否真的需要手动清除参数?这似乎不太好
我是合法的.我做错了什么?我不想做window.location.href,因为这会使整页重新加载,这不是我想做的事情.

我该怎么做才能清除参数?我一定做错了什么.

解决方法

网址之后的部分?被称为搜索(在角度 – 在其他方面它可以被称为查询).你只处理路径,这是?之前的部分.

你可以像这样使用它(是的,它的用途不仅仅是搜索…但在这个上下文中它的名字也是如此).

// Get the current value
var curr_search = $location.search();

// Clear the current search
$location.search({});

// Set the current search values
$location.search({key: "value"});

关于在AngularJS中$ location.path不会在工厂中更改angularjs stateprovider的问题我们已经讲解完毕,感谢您的阅读,如果还想了解更多关于$location.path()vs $location.hash()in angularjs、AngularJS $ location不更改路径、angularjs $location、AngularJS $location.path(‘/’)不清除search()参数等相关内容,可以在本站寻找。

本文标签: