在本文中,我们将带你了解在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)
- $location.path()vs $location.hash()in angularjs
- AngularJS $ location不更改路径
- angularjs $location
- AngularJS $location.path(‘/’)不清除search()参数
在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.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不更改路径
提交表单后,更改页面的URL时遇到问题。
这是我的应用程序的流程:
- 设置了路由,URL被识别到某个表单页面。
- 页面加载,控制器设置变量,指令被触发。
- 触发一个特殊格式指令,该指令使用AJAX执行特殊格式提交。
- 执行完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
一. 获取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#后面的内容,包括参数和哈希值):
// /foo?name=bunny#myhash
*3. 获取当前url的子路径(也就是当前url#后面的内容,不包括参数):
// /foo
4. 获取当前url的协议(比如http,https)
// http
5. 获取当前url的主机名
// localhost
6. 获取当前url的端口
// 80 (这里就是wamp的默认端口号)
*7. 获取当前url的哈希值
// myhash
*8. 获取当前url的参数的序列化json对象
// {"name":"bunny"}
二. 修改url的相关方法:
在上面讲到的所有获取url的8个方法,其中*开头的四个方法,可以传入参数进行修改url,在这种情况下,函数的返回值都是$location本身:
1.修改url的子路径(也就是当前url#后面的内容,不包括参数):
参数格式:字符串
// 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()参数
$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()参数等相关内容,可以在本站寻找。
本文标签: