我正在开发一个AngularJS应用程序,它有一个捕获所有路线(例如, .when('/:slug', {…) ),这是从以前的(非angular度)版本该应用程序。 响应catch的控制器都会尝试提取一个相关的对象,如果没有find的话,使用$location.path方法redirect到404页面。 这样可以使用户进入404页面,但是当用户在浏览器中回到页面时,他们会将页面拉回到404页面,并最终无法摆脱循环。 我的问题是,如果有1)更好的模式来处理这种情况,或2)如果有一种方法来重新路由用户不强制在浏览器中的历史推状态?
我正在使用AngularJS路线,并试图查看如何使用查询string(例如, url.com?key=value )。 Angular不理解包含相同名字albums的键值对的路线: angular.module('myApp', ['myApp.directives', 'myApp.services']).config( ['$routeProvider', function($routeProvider) { $routeProvider. when('/albums', {templateUrl: 'albums.html', controller: albumsCtrl}). when('/albums?:album_id', {templateUrl: 'album_images.html', controller: albumsCtrl}). otherwise({redirectTo: '/home'}); }], ['$locationProvider', function($locationProvider) { $locationProvider.html5Mode = true; }] );
在Angular 1.2中, ngRoute是一个独立的模块,所以你可以使用其他社区路由器,比如ui.router 。 我正在编写一个开放源代码模块,旨在为多个不同的路由器实现工作。 那么如何检查哪个路由器被加载或存在? 我在我的模块中的一个工厂内部正在做以下工作,但它不按照我所期望的方式工作: if (angular.module("ngRoute")) // Do ngRoute-specific stuff. else if (angular.module("ui.router")) // Do ui.router-specific stuff. 它会引发一个错误,无论哪个模块没有加载。 例如,如果应用程序使用的是ui.router ,那么ngRoute检查会引发以下错误: 未捕获的错误:[$ injector:nomod]模块'ngRoute'不可用! 您拼写错误的模块名称或忘记加载它。 如果注册一个模块,确保你指定依赖关系作为第二个参数。
用AngularJS应用程序提供正确的404的最好方法是什么? 一点背景:我正在构build一个Angular应用程序,并select使用 $locationProvider.html5Mode(true); 因为我希望URL看起来很自然(和多页面的“传统”Web应用程序无法区分)。 在服务器端(一个简单的Python Flask应用程序),我有一个捕获所有的处理程序,redirect到angular应用程序的一切: @app.route('/', defaults={'path': ''}) @app.route('/<path>') def index(path): return make_response(open('Ang/templates/index.html').read()) 现在,我试图找出如何处理404错误。 我见过的大部分Angular应用程序都执行以下操作: .otherwise({ redirectTo: '/' }) 这意味着他们无法提供一个合适的404。 然而,我宁愿返回一个正确的404,404状态代码(主要用于SEO目的)。 用Angular处理404的最好方法是什么? 我应该不用担心,坚持一个全面的? 或者我应该删除捕获所有,并在服务器端提供正确的404? 编辑清晰
正如我们在http://docs.angularjs.org/tutorial/step_07中看到的, angular.module('phonecat', []). config(['$routeProvider', function($routeProvider) { $routeProvider. when('/phones', {templateUrl: 'partials/phone-list.html', controller: PhoneListCtrl}). when('/phones/:phoneId', {templateUrl: 'partials/phone-detail.html', controller: PhoneDetailCtrl}). otherwise({redirectTo: '/phones'}); }]); build议使用e2etesting进行路由testing, it('should redirect index.html to index.html#/phones', function() { browser().navigateTo('../../app/index.html'); expect(browser().location().url()).toBe('/phones'); }); 不过,我认为'$ routeProvider'configuration是使用单个函数($ routeProvider)完成的,我们应该能够在不涉及浏览器的情况下进行unit testing,因为我认为路由function不需要浏览器DOM。 例如, 当url是/ foo时,templateUrl必须是/partials/foo.html而控制器是FooCtrl 当url是/ bar时,templateUrl必须是/partials/bar.html,而控制器是BarCtrl 这是一个简单的IMO函数,它也应该在一个简单的testing中进行testing,一个unit testing。 我googlesearch这个$ routeProviderunit testing,但没有运气。 我想我可以从这里借用一些代码,但不能做到这一点, https://github.com/angular/angular.js/blob/master/test/ng/routeSpec.js 。
我正在构build我的第一个Angular.js应用程序,并使用Yeoman 。 Yeoman使用Grunt允许您使用“grunt server”命令运行node.js连接服务器。 我在html5模式下运行我的angular度应用程序。 根据angular度文档,这需要修改服务器以将所有请求redirect到应用程序的根目录(index.html),因为angular度应用程序是单页面ajax应用程序。 “使用[html5]模式需要在服务器端重写URL,基本上你必须重写所有到你的应用程序入口点的链接(例如index.html)” 我试图解决的问题在这个问题中详细说明。 我如何修改我的grunt服务器以将所有页面请求redirect到index.html页面?
<h1>{{header}}</h1> <!– This Back button has multiple option –> <!– In home page it will show menu –> <!– In other views it will show back link –> <a ng-href="{{back.url}}">{{back.text}}</a> <div ng-view></div> 在我的模块configuration $routeProvider. when('/', { controller:HomeCtrl, templateUrl:'home.html' }). when('/menu', { controller:MenuCtrl, templateUrl:'menu.html' }). when('/items', { controller:ItemsCtrl, templateUrl:'items.html' }). otherwise({ redirectto:'/' }); 控制器 function HomeCtrl($scope, […]
我正在AngularJS中构build一个仪表板系统,我遇到了通过$location.path设置url的问题 在我们的仪表板中,我们有一些小部件。 当你点击它们时,每个都会显示一个更大的最大化视图。 我们正在尝试设置深层链接,以允许用户将最大化的小部件链接到仪表板。 目前,我们有2个看起来像/dashboard/:dashboardId和/dashboard/:dashboardId/:maximizedWidgetId 当用户最大化一个小部件时,我们使用$location.path更新url,但是这导致视图重新渲染。 由于我们有所有的数据,我们不想重新加载整个视图,我们只想更新URL。 有没有一种方法来设置url,而不会导致视图重新呈现? HTML5Mode设置为true 。
有没有办法获得当前状态的前一个状态? 例如,我想知道之前的状态是在当前状态B之前(之前的状态将是状态A)。 我无法在ui-router github文档页面中find它。
假设你正在使用路由: // bootstrap myApp.config(['$routeProvider', '$locationProvider', function ($routeProvider, $locationProvider) { $routeProvider.when('/home', { templateUrl: 'partials/home.html', controller: 'HomeCtrl' }); $routeProvider.when('/about', { templateUrl: 'partials/about.html', controller: 'AboutCtrl' }); … 而在你的HTML,你想要导航到关于页面,当一个button被点击。 一种方法是 <a href="#/about"> …但似乎ng-click也将在这里有用。 这个假设是否正确? 用ng-click代替锚点? 如果是这样,那将如何工作? IE: <div ng-click="/about">