【问题标题】:Rendering the content of a page inside a div using ng-include based on the href of an element?基于元素的href使用ng-include渲染div内的页面内容?
【发布时间】:2017-05-18 00:30:35
【问题描述】:

如果我有两个列表项

<li><a href="foo.html"></a></li>
<li><a href="bar.html"></a></li>

并基于单击哪个,使用 ng-include 在当前页面上的 div 中呈现?

<div ng-controller="main-panel" class="main-panel">
    <ng-include src="'clickedElement'"></ng-include>
</div>

我很困惑如何使用路由在 div 内渲染 html,这取决于您单击哪个元素?

main.config(function ($routeProvider, $locationProvider, $httpProvider) {

$routeProvider
  .when('/', {
    controller: 'side-menu'
   })

  .when('/signup', {
    templateUrl : 'signup.html',
    controller: 'main-panel'
   });

 $locationProvider.html5Mode(true);
});

HTML

<li ng-repeat="oucampus in secondaryLinks.oucampus">
  <a ng-href='{{oucampus.href}}'> {{oucampus.title}} </a>
</li>
<div class="main-panel" ng-view></div>

控制器功能

oucampus: [
        {title: "Requests", href:"signup.html"},
    ],

Plunker

【问题讨论】:

  • 在您的ng-repeat 中尝试将href 值更改为"#/signup" 或"/signup"
  • 我进一步更新了plunker 以显示带有标识符main-panel 的控制器的示例signup.html。
  • 一些带有 plunker 的东西可能会导致问题。 1)您没有在您的角度应用程序main 中注册ngRoute,这是路由工作所必需的。 2) 您没有在main.config() 中指定任何路由 3) ngRoute 没有被加载。这是一个分叉的 plunker,"/pending" 路由正在工作以作为示例。希望这会有所帮助!另请注意,HTML5 模式通常需要额外配置,尤其是在 Plunker 等工具中。
  • 抱歉,我忘了冻结我的更改。您所说的所有内容都已添加。
  • 这里是一个使用HTML5模式plunker的例子。 /pending 路由是唯一配置为工作的路由,但您可以使用它来构建路由的其余部分。

标签: angularjs


【解决方案1】:

如果您尝试基于路由呈现 HTML 内容,您可能需要使用路由服务,例如 ngRoute 或 ui-router。 ng-include 不是在 Angular 应用程序中实现路由的最佳选择。

使用ngRoute,您可以使用指令ng-view 根据您的应用程序config() 方法中指定/配置的路由将html/controllers/etc 角加载到某个DOM 元素中。当您单击具有相应路径的ng-href 的&lt;a&gt; 或使用$location 服务path() 方法以编程方式在控制器中使用path() 方法时触发此事件。

路由配置:

app.config(function($routeProvider) {
  $routeProvider
    .when('/foo', {
      templateUrl: 'foo.html',
      controller: 'FooController'
    })
    .when('/bar', {
      templateUrl: 'bar.html',
      controller: 'BarController'
    });
});

HTML:

<ul>
    <li><a ng-href="#/foo">foo</a></li>
    <li><a ng-href="#/bar">bar</a></li>
</ul>

<div ng-view></div>

这是一个plunker 演示基本路由的功能,包括基于特定路由加载特定控制器和 HTML 模板。

ng-包括 如果您绝对需要使用ng-include,您可以使用通过附加到$scope 或controllerAs 的ng-click 执行的函数来更新ng-include 的src 属性以加载基于点击元素的模板。我已经更新了plunker。

希望这会有所帮助!

【讨论】:

  • 你的效果很好,但是在我这边,我仍然无法显示任何 html 模板。请参阅修改后的帖子。
  • 在不激活 HTML5 模式的情况下尝试,并尝试将 href 属性从 "signup.html" 更改为 "#/signup"。您希望以路由而不是 HTML 文件的文件名为目标。
  • 将
  • 的 href 更改为 '#/' 并删除了 .html,但仍然没有。我能够重定向到该链接,但它不会将自己呈现到该 div 中。
  • 您是否在控制台中遇到任何错误?你能让它在 HTML5 模式下工作吗? HTML5 模式需要额外配置。
  • 控制台中没有显示错误。我将使用附加的 plunker 更新我的原始问题
  • 猜你喜欢
    相关资源
    最近更新 更多
    热门标签