Angularjs 否则,在StateProvider上

Angularjs 否则,在StateProvider上,angularjs,angular-ui,angular-ui-router,Angularjs,Angular Ui,Angular Ui Router,使用angular ui路由器,我如何使用on或如何使用它 您不能仅使用$stateProvider 您需要注入$urlRouterProvider,并创建一个类似以下内容的代码: $urlRouterProvider.otherwise('/otherwise'); /否则url必须像往常一样在状态上定义: $stateProvider .state("otherwise", { url : '/otherwise'...}) 查看此链接,其中有一个愚蠢的时刻,即当您意识到您所问

使用angular ui路由器,我如何使用on或如何使用它

您不能仅使用
$stateProvider

您需要注入
$urlRouterProvider
,并创建一个类似以下内容的代码:

$urlRouterProvider.otherwise('/otherwise');
/否则
url必须像往常一样在状态上定义:

 $stateProvider
    .state("otherwise", { url : '/otherwise'...})

查看此链接,其中有一个愚蠢的时刻,即当您意识到您所问的问题已经在示例代码的前几行中得到了回答时!请看一下示例代码

       angular.module('sample', ['ui.compat'])
      .config(
        [        '$stateProvider', '$routeProvider', '$urlRouterProvider',
        function ($stateProvider,   $routeProvider,   $urlRouterProvider) {
          $urlRouterProvider
            .when('/c?id', '/contacts/:id')
            .otherwise('/'); // <-- This is what I was looking for ! 


          ....
angular.module('sample',['ui.compat']))
.config(
[“$stateProvider”、“$routeProvider”、“$urlRouterProvider”,
函数($stateProvider、$routeProvider、$urlRouterProvider){
$urlRouterProvider
.when('/c?id','/contacts/:id'))

。否则(“/”);//您可以使用
$stateProvider
使用捕获所有语法(
“*path”
)。您只需在列表底部添加一个状态配置,如下所示:

$stateProvider.state("otherwise", {
    url: "*path",
    templateUrl: "views/error-not-found.html"
});
所有选项都在中进行了说明


$urlRouterProvider相反,此选项的优点是,否则(…)
,是指您不必被迫更改位置。

您还可以手动将$state插入到otherwise函数中,然后您可以导航到非url状态。这样做的好处是浏览器不会更改地址栏,这有助于处理返回上一页的操作

    $urlRouterProvider.otherwise(function ($injector, $location) {
        var $state = $injector.get('$state');

        $state.go('defaultLayout.error', {
            title: "Page not found",
            message: 'Could not find a state associated with url "'+$location.$$url+'"'
        });
    });
参考
角度路由
询问
ui路由器
。接受的答案使用
$routeProvider
,它需要
ngRoute
模块(而
ui路由器
需要
ui.router
模块)

而是使用
$stateProvider
,并表示类似于
.state(“否则”、{url:'/others'…})
, 但是,我在中找不到任何关于“否则”的提及。但是,我看到,
$stateProvider
在其中提到:


您不能仅使用
$stateProvider
。您需要插入
$urlRouterProvider

这就是我的答案可能对您有所帮助的地方。对我来说,像这样使用
$urlRouterProvider
就足够了:

 my_module
   .config([
    , '$urlRouterProvider'
    , function(
        , $urlRouterProvider){
            //When the url is empty; i.e. what I consider to be "the default"
            //Then send the user to whatever state is served at the URL '/starting' 
            //(It could say '/default' or any other path you want)
            $urlRouterProvider
                    .when('', '/starting');
                    //...
    }]);
我的建议与
ui路由器
,()是一致的,其中包括类似的使用。
when(…)
方法(对函数的第一次调用):


我只想补充一下已经提供的答案。最新版本的
@uirouter/angularjs
将类
UrlRouterProvider
标记为已弃用。他们现在建议改为使用
UrlService
。您可以通过以下修改获得相同的结果:

$urlService.rules.otherwise('/defaultState');

其他方法:

您想做什么?(请注意,我不完全理解
$stateProvider。否则
,它会帮我解决问题)请您详细说明:
您没有被迫更改位置
?他的意思是url将保持原来的状态。因此,如果用户转到
/this/does/not/exist
,则url将以这种方式保留在地址栏中。另一种解决方案会将您转到
/否则
,我使用了您的解决方案,并且成功了(我可以保留未找到的url,这很好,因为我正在使用,这样我还可以看到未找到页面的导航)对于用户导航到的url不存在的情况。但是如果我使用$state.go导航到此url(“否则”)在控制器中,我丢失了url。当用户转到项目的详细信息页面,服务器返回404(例如,如果该项目已被删除)时,我显式导航到此状态。您知道修复此问题的方法吗?@pcatre您可以使用选项location=false,并且url不会更改。例如$state.go('other',{},{location:false})实际上,您可以使用
$stateProvider
。如果您只想显示一个模板,而不想重定向,那么工作就少了。我更喜欢@juan hernandez的答案。传递给
的值是否必须与状态名称匹配(在本例中为
'/others'
)或者
url
选项的值?现在不推荐使用此选项-请参阅解决了我在使用其他选项时如何检查我们是否处于应用程序中间或加载状态的问题-非常感谢:)您节省了我的时间!不要忘了您是否要最小化此值
$urlService.rules.otherwise('/defaultState');