我正试图调用一个控制器,应该与home.category路由连接,但它不被调用。 有什么不对? $stateProvider .state("home", { // Use a url of "/" to set a states as the "index". url: "/", templateUrl: APP_CONFIG.baseUrl + 'partials/layouts/home.html', controller: 'MainCtrl' }) .state("home.category", { // Use a url of "/" to set a states as the "index". url: "c/:categoryId/:categorySlug", controller: function($stateParams) { alert($stateParams.categoryId); } })
我正在使用angular度UI路由器。 我有我的路线configuration下面 .config(function config($stateProvider) { $stateProvider.state('newsFeedView', { url: '/newsFeed', controller: 'newsFeedController', templateUrl: '../src/app/bulletinBoard/views/newsFeed.part.html', data: { pageTitle: 'News Feed' } }) .state('tradeFeedView', { url: '/tradeFeed', controller: 'tradeFeedController', templateUrl: '../src/app/bulletinBoard/views/tradeFeed.part.html', data: { pageTitle: 'Trade Feed' } }) .state('bulletinBoard', { url: '/bulletinBoard', views: { 'tradeFeed': { url: "", controller: 'tradeFeedController', templateUrl: '../src/app/bulletinBoard/views/tradeFeed.part.html' }, 'newsFeed': { url: "", controller: […]
我正在使用ui路由器嵌套状态和视图。 当我点击链接时,URL变成子状态的URL,但是模板不加载。 例如,当URL更改为子状态project/settings ,相应的模板project.settings.html不加载。 这是一个由普恩克尔提供的SSCCE 以下是我的代码: app.js myApp.config(function ($stateProvider, $urlRouterProvider){ $stateProvider .state('project', { url: "/project", views:{ "content":{templateUrl: "partials/project.html"}, "header":{templateUrl: "partials/header"} } }) .state('project.settings', { url: "/settings", views:{ "content":{templateUrl: "partials/project.settings.html"}, "header":{templateUrl: "partials/header"} } }) $urlRouterProvider.otherwise("/") }); /* cheching whether the user is authentic or not*/ myApp.run(function($rootScope,$location,$cookieStore,validateCookie,$state) { $rootScope.$on('$stateChangeStart',function(event,toState,toParams,fromState){ if($cookieStore.get('user')){ validateCookie.authService(function(result,error){ if(!result){ $location.path("/"); }else{ $state.go('project.settings'); } }); […]
有没有办法看到$stateProvider上设置的所有状态? 在这种情况下,我希望我的状态分配分布在多个文件中。 我想检查在run或config在不同的文件中build立的状态。 例如: # component1.coffee angular.module('zoo').config ($stateProvider) -> $stateProvider.state 'component1', url: '/component1' template: _template controller: 'Component1Ctrl' # component2.coffee angular.module('zoo').config ($stateProvider) -> $stateProvider.state 'component2', url: '/component2' template: _template controller: 'Component2Ctrl' # componentNavigation.coffee angular.module('zoo').run ($state) -> console.log 'All configured states:', $state.configuredStates # doesn't exist. 有没有什么会列出两个国家, component1和component2 ?
更新 :这应该是可能的1.0.0alpha0从angular-ui路由器。 请参阅发行说明https://github.com/angular-ui/ui-router/releases/tag/1.0.0alpha0和问题https://github.com/angular-ui/ui-router/issues/1018 I创build。 我想访问状态的名称和应用程序正在导航到使用angular度ui路由器时的解决scheme的其他属性。 原因是:我想在允许应用程序进入该页面之前asynchronous加载一些用户数据(包括他们的访问权限)。 目前这是不可能的,因为注入$ state到parsing点指向你正在导航的状态,而不是你正在导航的状态。 我知道我可以: 用$ rootScope('$ stateChangeStart')把toState放到别的地方,然后把它保存在我的设置服务中。 但是我觉得有点混乱 硬编码的状态进入决心,但我不想重复我的决心所有网页 我也在ui-router github上创build了一个问题(如果你感兴趣的话,请加1): https : //github.com/angular-ui/ui-router/issues/1018 这是我的代码到目前为止。 任何帮助感激! .config(function($stateProvider) { $stateProvider.state('somePage', { // .. resolve: { userData: function($stateParams, $state, Settings) { return Settings.getUserData() // load user data asynchronously .then(function (userData) { console.log($stateParams); console.log($state); // Problem: $state still points to the state you're […]
这是一个提交function的控制器: $scope.submit = function(){ $http.post('/api/project', $scope.project) .success(function(data, status){ $modalInstance.dismiss(true); }) .error(function(data){ console.log(data); }) } } 这是我的testing it('should make a post to /api/project on submit and close the modal on success', function() { scope.submit(); $httpBackend.expectPOST('/api/project').respond(200, 'test'); $httpBackend.flush(); expect(modalInstance.dismiss).toHaveBeenCalledWith(true); }); 我得到的错误是: Error: Unexpected request: GET views/appBar.html views / appBar.html是我的templateUrl: .state('project', { url: '/', templateUrl:'views/appBar.html', controller: 'ProjectsCtrl' }) […]
我希望能够在不改变状态的情况下更改地址的URL,以防止重新渲染。 从我的search,目前ui-router不提供这个,但anuglar $location.path 。 所以,我自然想用$state.get(stateName)来访问状态的URL,这样我就不会手动inputURL。 我有两个问题: $state.get(stateName)只返回相对path。 我怎样才能获得绝对path? 它还返回状态的定义,参数未定义。 如何获取带有参数的URL? 例如,如果我有一个名为user.home.view与user.home状态,我有我的国家定义为 'user': { abstract: true, url: '^/users/' }, 'user.home': { url: '' }, 'user.home.view': { url: ':id/' } 所以现在, $state.get(user.home.view).url返回:id/ 。 我怎样才能得到完整的url(即/users/5/ )?
这可能很简单,但我找不到文档中的任何东西,谷歌search没有帮助。 我试图在$stateProvider中定义一个状态,其中我需要在服务器上获取所需的URL的URL取决于状态URL参数。 总之,像这样的东西: .state('recipes.category', { url: '/:cat', templateUrl: '/partials/recipes.category.html', controller: 'RecipesCategoryCtrl', resolve: { category: function($http) { return $http.get('/recipes/' + cat) .then(function(data) { return data.data; }); } } }) 以上不起作用。 我尝试注入$routeParams来获得所需的cat参数,没有运气。 什么是这样做的正确方法?
我想在浏览器跟踪由ui-routerdynamic创build的链接之前validation一定的条件。 我正在寻找$rootscope.$on('$stateChangeStart', ..)但我没有访问controller.$scope从那里。 我也需要在应用程序的几个地方使用它,并且会很麻烦。 请记住, ui-sref与ui-sref-active (一起工作)相关联,所以我不能删除ui-sref并且使用$state.$go('some-state')用ng-click调用函数。 条件应该在$scope function和on on-click event进行评估(在能够取消它的转换之前) 我需要这样的东西: <li ui-sref-active="active"> <a ui-sref="somestate" ui-sref-if="model.validate()">Go Somestate</a> </li> 我试过了: <li ui-sref-active="active"> <a ui-sref="somestate" ng-click="$event.preventDefault()">Go Somestate</a> </li> <li ui-sref-active="active"> <a ui-sref="somestate" ng-click="$event.stopImmediatePropagation()">Go Somestate</a> </li> 和 <li ui-sref-active="active"> <a ui-sref="somestate"> <span ng-click="$event.stopPropagation();">Go Somestate</span> </a> </li> 甚至 <li ui-sref-active="active"> <a ui-sref="somestate" onclick="return false;">Go Somestate</a> </li> 但是不行。 SANDBOX
angular度ui路由器允许多个嵌套视图 。 这些可互换的观点的作用似乎与指示的作用重叠。 使用(多重嵌套) ui-view vs angular的指令有什么优点/缺点? UPDATE 状态和路由是两个不同的function。 各国允许你换出partial.html模板及其控制器,你可以(可选地)指定相应的URL /路由。 在Tim Kindberg(一个ui-router dev)的电子邮件回复中: ui-view是一个指令,所以如果你使用它,你正在使用一个特定的指令来处理ui-router模块的其他部分。 我无法想象它很容易推出自己的指令来取代这个function。 对此,看起来你可以有两个select: 正常指令: app.directive('myDir1', {/* controller: … */}) .directive('myDir2', {/* controller: … */}) vs ui-view“指令” $stateProvider.state('route1', { /* url: "/route1", // optional?? */ views: { "myDir1": { templateUrl: "myDir1.html" /* , controller: … */ }, "myDir2": { templateUrl: "myDir2.html" /* […]