【问题标题】:Edit HTML outside ng-view on route change在路由更改时在 ng-view 之外编辑 HTML
【发布时间】:2016-02-23 20:54:02
【问题描述】:

我想在路由更改时使用路由信息更改导航栏中的一些 HTML。我几乎可以让它与下面的代码一起工作,但数据在到达 DOM 时不会被解析为 HTML。我尝试使用$sce 服务,但这并没有真正让我有所收获。

如果有任何其他(更好的)方法可以在路由更改时编辑 HTML,请告诉我。

HTML

<nav>
  <div ng-controller="BrandCtrl">
    <div class="nav-brand">
      {{brand}}
    </div>
  </div>
</nav>

<div ng-view></div>

JS

var app = angular.module("app", ['ngRoute']);

app.controller("BrandCtrl", function($scope, $route) {
  $scope.$on('$routeChangeSuccess', function() { 
    var html = $route.current.html;
    $scope.brand = html;
  });
});

app.config(function ($routeProvider) {
  $routeProvider
  .when('/next-page', {
    templateUrl: 'partials/next-page.html',
    controller: 'BrandCtrl',
    html: '<h3>New brand</h3>'
});

【问题讨论】:

  • 为什么不直接使用模板?请注意,您在该路线上有 2 个不同的 BrandCtrl 实例......一个用于外部 &lt;ng-view&gt;,另一个用于内部
  • 谢谢@charlietfl。所以显然这不是要走的路。想详细说明您只使用模板是什么意思?
  • 与使用模板以角度渲染其他所有内容的方式相同。

标签: html angularjs angularjs-ng-route angular-controller


【解决方案1】:

您应该通过路由中的“视图”更改 HTML。

 $stateProvider.state('app',{url: 'someurl',   
    views: {
      'topnav': { templateUrl: 'path/to/some/html',
            controller: 'navcontroller'},
      'mainContent': {templateUrl: 'path/to/some/other/html',
            controller: 'contentcontroller'}    } 
 });

在您的 HTML 中,您将有多个视图:

 <div ui-view="topnav"></div>   
 <div ui-view="mainContent"></div>

【讨论】:

  • 感谢@Scott 的回答。但是,我看不到如何根据 mainContent 中的视图更改来更改 topnav 中的 html。
  • 查看主要内容的变化应该是路由变化的结果。用户点击某物,路线发生变化。当路线改变时,主要内容和顶部导航都会改变。您还可以通过路由将参数传递给您的视图。因此,如果您需要关闭比路线更具体的内容,您可以将其传递给“topnav”视图,然后该视图可以相应地采取行动,可能会根据传入的参数“显示”或“隐藏”某些内容. 看看 ui.router 的文档github.com/angular-ui/ui-router
  • 我还有另一个 angularjs 问题。你愿意对此发表评论吗?发布答案的用户没有详细说明就离开了。这是链接:stackoverflow.com/questions/35588344/…
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2013-04-08
  • 2015-01-14
  • 2013-06-05
  • 2016-09-15
  • 1970-01-01
  • 2012-09-09
  • 1970-01-01
相关资源
最近更新 更多