javascript - 外部化 View 的指令不起作用

标签 javascript html angularjs model-view-controller angularjs-directive

我正在使用pageslide directive为了当我点击图标时显示横向滑动菜单。

这是通常的方法,它的工作原理:

<div class="navbar-header">
  <span ng-controller="slideController as s">
    <a class="navbar-brand" href="javascript:void(0)"
       ng-click="s.toggle()"><i class="fa fa-bars fa-lg"></i></a>
          <div pageslide ps-open="s.isActive" ps-side="left">
            <div style="padding:20px">
              <h2>Hello Pageslide</h2>
              <p>Put here whatever I want in the lateral menu</p>
              <a ng-click="s.toggle()" class="button" >Close</a>
            </div>
          </div>
  </span>
  <a class="navbar-brand text-danger" href="javascript:void(0)">Balrog</a>
</div>

但我喜欢在外部模板中制作菜单内容,所以我正在尝试这样做:

<div class="navbar-header">
  <span ng-controller="slideController as s">
    <a class="navbar-brand" href="javascript:void(0)"
       ng-click="s.toggle()"><i class="fa fa-bars fa-lg"></i></a>
    <menu-item isActive="s.isActive"></menu-item>
  </span>
  <a class="navbar-brand text-danger" href="javascript:void(0)">Balrog</a>
</div>

将此作为menu.html:

<div pageslide ps-open="s.isActive" ps-side="left">
  <div style="padding:20px">
    <h2>Hello Pageslide</h2>
    <p>Put here whatever I want in the lateral menu</p>
    <a ng-click="s.toggle()" class="button" >Close</a>
  </div>
</div>

另外,这是相关的 Controller :

'use strict';

angular.module('BalrogApp').controller('slideController', function(){

  this.isActive= false; // This will be binded using the ps-open attribute

  this.toggle = function(){
    this.isActive= !this.isActive
  }

});

<menu-item>指令:

angular.module('BalrogApp').directive('menuItem', function () {
  return {
    restrict: 'E',
    templateUrl: "views/menu.html",
    scope: {
      isActive: '='
    },
    controller: 'slideController',
    controllerAs: 's',
    bindToController: true
  }
});

所以它不是这样工作的,也许是因为主视图(包括 <menu-item >)本身包含在主页中,这要归功于 <ng-view>

或者也许是pageslide-directive需要 <div pageslide ...>及其父元素位于同一个文件中?

我可以从控制台看出toggle()被调用并更改 isActive在这两种情况下,但它都没有打开带有指令版本的菜单。

此外,添加 ng-controller="slideController as s"到根<div>pageslide属性没有改变任何东西。

那么我怎样才能使这个与另一个文件中的菜单一起工作呢?

最佳答案

您是否尝试替换 <div ng-include="menu.html"></div><div ng-include="'menu.html'"></div> 。根据https://docs.angularjs.org/api/ng/directive/ngInclude ,您必须将字符串常量括在单引号中。

关于javascript - 外部化 View 的指令不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33432533/

相关文章:

javascript - 使用jquery将数据从html发布到flask View

html - 如何使用 Protractor - Angular 在第三方包中进行 E2E 测试数据

javascript - AngularJS Controller 内的数组未初始化

javascript - Angular ng src 无法在 Visual Studio Cordova 中工作

javascript - Angular ng-repeat with condition

html - 为什么这里外面的<div>没有完全包围住里面的<div>呢?

javascript - element.sortable 不是一个函数 Angular

javascript - Facebook API javascript FB.logout 拒绝在框架中显示 'https://www.facebook.com/home.php',因为它将 'X-Frame-Options' 设置为 'deny'

javascript - 保持干燥的最佳实践

javascript - 单击具有相同父 div 的按钮时显示 div