【问题标题】:Using Angular with no template page在没有模板页面的情况下使用 Angular
【发布时间】:2015-01-20 20:14:55
【问题描述】:

我有一些路线,其中一些视图使用我的 index.html 作为模板。在特定视图(例如登录页面)上,我不想使用 index.html 作为模板。如何用 Angular 做到这一点:

My routes:
.when('/user/:id/update',{
      templateUrl: 'views/updateUser.html',
      controller:  'updateUserCtrl'
  })
  .when('/role', {
    templateUrl: 'views/role.html',
    controller: 'RoleCtrl'
  })
  .when('/login', {
    controller: 'RoleCtrl' //Here I want a page withou template
  })

我已经尝试过像这样使用 ui-route:

$stateProvider
.state('contacts', {
    abstract: true,
    template: '<ui-view/>',
    url: '/contacts'
})
.state('contacts.list', {
    // loaded into ui-view of parent's template
    templateUrl: 'contacts.list.html',
    url: '/list'
})
.state('contacts.detail', {
    // loaded into ui-view of parent's template
    templateUrl: 'contacts.detail.html',
    url: '/detail'
})

在这两种情况下,我的页面总是从我的 index.html 继承。

【问题讨论】:

  • 您为什么要这样做?路由到页面但不向用户显示任何内容有什么意义?如果你真的需要,你可以只路由到一个空白的 html 模板,但我没有看到 i 中的意义。
  • 您是否可能只想在 index.html 中有一个空正文并拥有一个“主”模板,其中包含您当前的所有 html 以及其他路由作为子路由,但 /login 有不同的主模板?
  • 嗨,我的 index.html 几乎有我的页面的模板,但有些页面完全不同,我不想使用 index.html 作为模板,我想要另一个在这些不同的页面上使用。另一种情况是登录页面。我的登录页面只是一个用户注册或点击注册的表单,我没有页眉、页脚、侧边菜单等。
  • 嗨@JasonGoemaat 有点像这样。我的 index.html 有我所有的结构,如页眉、菜单、页脚、js 和 css 导入,但在 /login 我只想要一个没有所有这些东西的简单页面,例如一个带有简单表单的空页面

标签: javascript angularjs angularjs-routing angularjs-templates


【解决方案1】:

至少您可以使用 ui-router 进行 abstract: true 设置路由为无模板并将控制器堆栈到视图上以实现分离行为。 https://github.com/angular-ui/ui-router/wiki/Nested-States-%26-Nested-Views

否则,如果你想加载一个没有模板的控制器,理论上你可以使用 vanilla angularjs 来做 template : "" 。 http://weblog.west-wind.com/posts/2013/Oct/15/Routing-to-a-Controller-with-no-View-in-Angular

【讨论】:

  • 您好,非常感谢您的帮助,我尝试这样做但它不起作用,我不知道我是否在写。我想我要做的很简单,几乎所有的项目都有这种情况。你能帮我举个简单的例子吗?
  • 我想我误解了你的问题。在您的 index.html 上,您有一些元素围绕着注入模板的 ng-view。您根本不希望您的登录页面使用这些元素?
  • 我认为在这种情况下,你需要一个单独的索引页面——比如loggedInIndex.html,它会有你想要的标记,然后在你的路由器中,你会做templateUrl:“views/登录索引.html"
  • 查看 jason goemaat 的回答
  • 我遵循了这个文档github.com/angular-ui/ui-router/wiki/…,他们这样做了:$stateProvider .state('contacts', { abstract: true, template: '', url: '/联系人' }) .state('contacts.list', { // 加载到父模板的 ui-view templateUrl: 'contacts.list.html', url: '/list' }) 但即使在此之后我的 contacts.list .html 继承自我的 index.html。有人有什么想法吗?众所周知,我正在使用 yeoman 和 angular-generate 项目
【解决方案2】:

不推荐它的工作方式,因为您的浏览器重新加载了应用程序的所有内容,它破坏了单页应用程序的所有概念。

其中一种方法是在您的模板(html 文件)中使用ng-view/ui-view 并在您的服务/控制器中使用$location 来替换 url 地址(如果用户身份验证正常)。

看看这个 plnkr 有两个有效的例子:

http://plnkr.co/edit/vPyH5lwbwYCMx6RCnVb0?p=preview

【讨论】:

    【解决方案3】:

    对于您不希望 index.html 的基本模板(页眉、页脚等)出现的视图 - 您可以使用覆盖整个页面(在该组件的 html 和 css 中)的 div。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-05-03
      • 1970-01-01
      • 2011-11-11
      • 1970-01-01
      • 2020-01-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多