ng-routed AngularJS SPA ng-显示Bootstrap Carousel不工作

时间:2015-07-30 21:05:51

标签: angularjs twitter-bootstrap carousel ngroute

PLUNKER

我正在使用ng-route和ng-animate开发AngularJS SPA。我正在尝试使用ng-show在index.html#/上显示Bootstrap Carousel。非常简单的任务。

我希望Carousel在索引页面上显示,但不在about页面或联系页面上显示。

我正试图在我的indexController中执行逻辑:

  if ($location.path() == "/") {
      $scope.isIndexPage = true;
  }

在我的HTML中:

<div id="myCarousel" class="carousel slide" data-ride="carousel" ng-show="isIndexPage">

但它没有按预期工作:Carousel不显示。移除ng-show属性后,轮播将显示,但在所有页面上都会显示。

如何让Carousel仅在索引页面上显示?我尝试了ng-includeng-if carousel.htm等变体。诸如“AngularJS SPA和Bootstrap Carousel”之类的众多Google搜索都显示了无法回答的SO问题。

提前感谢任何输入。这是PLUNKER

1 个答案:

答案 0 :(得分:1)

将主页特有的内容放入主页模板有点奇怪,但无论如何...... 您的代码有两个主要问题:

  1. 您尝试从不受此控制器控制的页面部分访问indexController范围中的变量。控制器仅控制其视图。控制器的$范围仅限于其视图。
  2. 您只需初始化一次isIndexPage变量。它永远不会改变。
  3. 解决方案:

    • 为整个页面创建一个控制器,并将用于控制旋转木马的可见性的逻辑放在该控制器中
    • 使用将根据当前位置返回true或false的函数

    请参阅http://plnkr.co/edit/8luxeIbyIPEKy0LkemM0?p=preview获取plunker的一个分支(附加的JS代码位于script.js的末尾):

    appname.controller('MainCtrl', function($scope, $location) {
      $scope.isIndexPage = function() {
        return $location.path() === '/';
      }
    });
    

    并在index.html文件中:

    <body ng-controller="MainCtrl">
        <div ng-show="isIndexPage()" ...>