27

是否可以设置ui-router只有控制器的路线?目的是在某个 URL 上,我唯一想做的就是以编程方式采取行动,而不是在视图方面显示任何内容。我已经阅读了文档,但我不确定他们是否提供了一种方法来做到这一点。

是的,我读过这个:https ://github.com/angular-ui/ui-router/wiki/Frequently-Asked-Questions#how-to-open-a-dialogmodal-at-a-certain-state ,但是这不是我要找的。

例如,假设我有一个带视图的基本主体:

<body ui-view></body>

还有一些基本配置:

// Routes
$stateProvider
  .state('myaction', {
    url: "/go/myaction",
    onEnter: function() {
      console.log('doing something');
    }
  });

/go/myaction被访问时,视图是空白的。是否有可能做到这一点?

4

5 回答 5

10

我能够通过将我正在执行编程操作的无头状态重定向到在无头状态结束时带有视图的状态来解决这个问题:

$stateProvider
  .state('myaction', {
    url: "/go/myaction",
    onEnter: function() {
      console.log('doing something');
    }
    controller: function($state) {
      $state.go('home');
    }
  });
于 2014-07-16T21:17:37.450 回答
9

你不能有一个没有视图的控制器,但你可以使用它onEnter来代替控制器。如果您不想在访问此状态时更改当前视图,您可以将其定义为子状态:

$stateProvider

   // the parent state with a template
   .state('home', {
      url: '/home',
      templateUrl: '/home.html',
      controller: 'HomeCtrl'
   })

   // child of the 'home' state with no view
   .state('home.action', {
      url: '/action',
      onEnter: function() {
         alert('Hi');
      },
   });

现在home.html你可以做这样的事情:

<a href ui-sref=".action">Greet me!</a>
于 2015-06-04T14:27:20.850 回答
1

从文档:

警告:如果没有定义模板,控制器将不会被实例化。

为什么不使用空字符串作为模板来克服这个问题?

于 2013-10-04T06:00:38.577 回答
1

是的,你可以这么做。使用绝对视图名称来重用<ui-view>另一个状态。

看看这个例子:

用户访问我的应用程序,但根据他们是否经过身份验证,我想将他们发送到公共或私人页面。我index纯粹使用状态来查看他们是否已登录,然后将他们重定向到index.privateor index.public

子状态使用绝对视图名称来使用与状态<ui-view>对应的元素index。这样,我不需要再做一个嵌套的<ui-view>.

$stateProvider.state('index', {
  url: "/",
  controller: 'IndexCtrl'
}).state('index.private', {
  views: {
    "@": {
      templateUrl: 'private.html',
      controller: 'PrivateCtrl'
    }
  }
}).state('index.public', {
  views: {
    "@": {
      templateUrl: 'public.html',
      controller: 'PublicCtrl'
    }
  }
});

关于这个例子的一个小说明:我在@这里使用快捷方式。通常你会使用viewname@statename.

于 2015-03-19T10:11:56.433 回答
0

我对此的解决方案只是包含一个空白的模板(html 文件)。

于 2018-03-22T17:11:08.430 回答