4

我正在为前端使用 Materializecss 和 AngularJS 开发一个 Web 应用程序,我的问题是 materialize 的下拉菜单组件对我不起作用。

这是他们网站上的示例下拉列表

$( document ).ready(function(){
    $(".dropdown-button").dropdown();
});
<!-- Dropdown Structure -->
<ul id="dropdown1" class="dropdown-content">
  <li><a href="#!">one</a></li>
  <li><a href="#!">two</a></li>
  <li class="divider"></li>
  <li><a href="#!">three</a></li>
</ul>
<nav>
  <div class="nav-wrapper">
    <a href="#!" class="brand-logo">Logo</a>
    <ul class="right hide-on-med-and-down">
      <li><a href="sass.html">Sass</a></li>
      <li><a href="components.html">Components</a></li>
      <!-- Dropdown Trigger -->
      <li><a class="dropdown-button" href="#!" data-activates="dropdown1">Dropdown<i class="mdi-navigation-arrow-drop-down right"></i></a></li>
    </ul>
  </div>
</nav>

在他们的网站中它确实有效,但在我的网站中它没有,我猜它必须对href="#!"下拉按钮的一部分做一些事情,因为也许 AngularJS 正在尝试映射路线或其他东西

如果这是问题,那么我怎样才能让 AngularJS 忽略一些 href?因为为了做下拉菜单和模态,我需要那些href="#!",或者如果没有,有什么问题,我该如何解决?

我尝试删除 href 或将其更改为href="",但这没有用。

4

2 回答 2

2

小心混合框架,它可以而且可能会产生意想不到的效果。至于显示和隐藏元素,这里有一个如何隐藏、显示或切换任何元素的简单示例。

演示

HTML

<a href="javascript:void()" data-show="hidden">Show</a>
<a href="javascript:void()" data-hide="hidden">Hide</a>
<a href="javascript:void()" data-toggle="hidden">Toggle</a>
<div id="hidden"><!-- This can be any type of element -->
    <!-- Anything in here -->
</div>

CSS

#hidden {
    display: none;
}

JavaScript

$("[data-show]").on("click", function () {
    $("#" + $(this).attr("data-show")).css("display", "initial");
});
$("[data-hide]").on("click", function () {
    $("#" + $(this).attr("data-hide")).css("display", "none");
});
$("[data-toggle]").on("click", function () {
    var target = $("#" + $(this).attr("data-toggle"));
    if (target.css("display") === "none") {
        target.css("display", "initial");
    } else {
        target.css("display", "none");
    }
});

我在这里使用了 jQuery,因为您在脚本中使用了 jQuery,这也可以在纯 JavaScript 中轻松完成。确保将 JavaScript 放在 DOM 之后,否则将脚本包装在document.onload处理程序中。

于 2015-04-29T17:10:58.263 回答
0

我最近遇到了类似的情况。我还在使用带有 AngularJS的Materializecss 。

这是我在 CodePen 的解决方案:http: //codepen.io/omt66/pen/pyeQoy

我主要将您的示例保留在上面,并进行了细微的更改。下面显示了 AngularJS 部分的代码片段。

请查看示例中的笔设置,并将外部 JS 文件包含在您的项目中。这些基本上是 jQuery、Materialize、Angular 库。

var app = angular.module("app", []);
app.controller("MainCtrl", function($scope) {
  console.log("In Angular MainCtrl");

  $scope.items = [
    {text: "Bing", url: "http://bing.com"},   
    {text: "ZDNet", url: "http://zdnet.com"},
    {text: "CNet", url: "http://cnet.com"}
  ]; 

  $('.dropdown-button').dropdown({
    belowOrigin: true, 
    alignment: 'left', 
    inDuration: 200,
    outDuration: 150,
    constrain_width: true,
    hover: false, 
    gutter: 1
  });
});
于 2016-03-21T22:17:12.770 回答