UI Bootstrap 下拉指令导致 multidir 问题

UI Bootstrap dropdown directive causes multidir issue

您好,我正在尝试让 UI Bootstrap 的下拉指令起作用。每当我尝试使用 'dropdown' 指令时,我都会收到此错误消息:

控制台错误消息:

Multiple directives [dropdown, dropdown] asking for 'dropdown' controller on: <li class="dropdown pos-stc" dropdown="">
http://errors.angularjs.org/1.3.9/$compile/multidir?p0=dropdown&p1=dropdown&p2='dropdown'ontroller&p3=%3Cli%class%3D%dropdown%20pos-stc%22%20dropdown%3D%22%22%3E
    at http://localhost:9000/bower_components/angular/angular.js:63:12
    at assertNoDuplicate (http://localhost:9000/bower_components/angular/angular.js:7990:15)
    at applyDirectivesToNode (http://localhost:9000/bower_components/angular/angular.js:7339:11)
    at compileNodes (http://localhost:9000/bower_components/angular/angular.js:6997:15)
    at compileNodes (http://localhost:9000/bower_components/angular/angular.js:7009:15)
    at compileNodes (http://localhost:9000/bower_components/angular/angular.js:7009:15)
    at compile (http://localhost:9000/bower_components/angular/angular.js:6904:15)
    at link (http://localhost:9000/bower_components/angular/angular.js:22225:9)
    at invokeLinkFn (http://localhost:9000/bower_components/angular/angular.js:8213:9)
    at nodeLinkFn (http://localhost:9000/bower_components/angular/angular.js:7722:11) angular.js:11594(anonymous function) angular.js:11594(anonymous function) angular.js:8544invokeLinkFn angular.js:8215nodeLinkFn angular.js:7722compositeLinkFn angular.js:7075publicLinkFn angular.js:6954boundTranscludeFn angular.js:7093controllersBoundTransclude angular.js:7749(anonymous function) angular.js:22173processQueue angular.js:13171(anonymous function) angular.js:13187Scope.$eval angular.js:14384Scope.$digest angular.js:14200Scope.$apply angular.js:14489done angular.js:9646completeRequest angular.js:9836requestLoaded

有人能告诉我错误是什么吗?当我删除指令时,一切都很好,除了下拉菜单不起作用:(

HTML:

  <li class="dropdown" dropdown>
    <a href class="dropdown-toggle clear" dropdown-toggle>
      <span class="thumb-sm avatar pull-right m-t-n-sm m-b-n-sm m-l-sm">
        <img src="img/a0.jpg" alt="...">
        <i class="on md b-white bottom"></i>
      </span>
      <span class="hidden-sm hidden-md">John.Smith</span> <b class="caret"></b>
    </a>
    <!-- dropdown -->
    <ul class="dropdown-menu animated fadeInRight w">
      <li class="wrapper b-b m-b-sm bg-light m-t-n-xs">
        <div>
          <p>300mb of 500mb used</p>
        </div>
        <progressbar value="60" class="progress-xs m-b-none bg-white"></progressbar>
      </li>
      <li>
        <a href>
          <span class="badge bg-danger pull-right">30%</span>
          <span>Settings</span>
        </a>
      </li>
      <li>
        <a ui-sref="app.page.profile">Profile</a>
      </li>
      <li>
        <a ui-sref="app.docs">
          <span class="label bg-info pull-right">new</span>
          Help
        </a>
      </li>
      <li class="divider"></li>
      <li>
        <a ui-sref="access.signin">Logout</a>
      </li>
    </ul>
    <!-- / dropdown -->
  </li>

假设您使用的不是最新版本的 bootstrap。以前的版本(例如:0.11.0)有指令 class 限制(C)以及属性限制(A)。因此,您通过指定 class 以及属性来重复元素的指令。这会导致多个指令错误。您可以只使用 class 名称,因为无论如何您都需要它来应用适当的内置 bootstrap css 规则。 i.e 将 <li class="dropdown" dropdown> 更改为 <li class="dropdown"> 将其升级为 bootstrap 0.12.0.

尝试:

<li class="dropdown">
   <a href class="dropdown-toggle clear">

请记住,当您将它升级到 0.12.0 或更高版本时,它们已经删除了对指令的 class 限制,并且它们将是基于所使用的 angular 版本的默认指令限制。所以你需要切换回你现在拥有的方式。参见

看来问题的原因可能是因为您从官方网站引用了演示,但使用的是旧版本 bootstrap。