javascript - Angularjs +指令文件html内容点击事件在js文件中不起作用

标签 javascript jquery html angularjs angularjs-directive

我是 Angular JS 新手,

现在尝试拆分模板,例如页眉、页脚、左侧菜单等。

这里我添加了左侧菜单的示例。

左侧菜单有 id=sidebar-menu"。一旦点击侧边栏菜单需要执行一些操作。

但是相应的js在custome.js中有

“侧边栏菜单”点击事件不起作用。

索引.html

<!DOCTYPE html>
<html lang="en">
    <head>
        <link href="bootstrap.css" rel="stylesheet">
        <script src="jquery.min.js"></script>
    </head>
    <body class="nav-md" ng-app="myApp" >
        <div class="container body">
            <div class="main_container">
                <div left-menu></div>
                <!-- top navigation -->
                <div top-navigation></div>
                <!-- /top navigation -->
            </div>
            <script src="vendor/bootstrap/dist/js/bootstrap.js"></script>
            <script src="vendor/angular/angular.js"></script>
            <script src="custom.js"></script>
            <script src="app.js"></script>
    </body>
</html>

app.js

var app = angular.module('myApp', ['ngRoute']);
app.config(['$routeProvider', '$httpProvider',
function($routeProvider, $httpProvider) {
    $routeProvider.when('/login', {
        templateUrl : 'views/login.html',
        controller : 'userController'
    }).when('/register', {
        templateUrl : 'views/register.html',
        controller : 'userController'
    }).otherwise({
        redirectTo : '/login'
    });
}]);
app.directive('leftMenu', function() {
    return {
        restrict : 'A',
        templateUrl : "left-menu.html",
        replace : true
    };
});

自定义.js

$(function () {
    $('#sidebar-menu li').click(function () {

        alert("Ddd");
        if ($(this).is('.active')) {
            $(this).removeClass('active');
            $('ul', this).slideUp();
            $(this).removeClass('nv');
            $(this).addClass('vn');
        } else {
            $('#sidebar-menu li ul').slideUp();
            $(this).removeClass('vn');
            $(this).addClass('nv');
            $('ul', this).slideDown();
            $('#sidebar-menu li').removeClass('active');
            $(this).addClass('active');
        }
    });

});

左菜单.html

<div id="sidebar-menu" >
    <div class="menu_section">
        <h3>General</h3>
        <ul class="nav side-menu">
            <li>
                <a href="index3.html">Dashboard</a>
            </li>
            </li>
            <li>
                <a href="form_advanced.html">Advanced Components</a>
            </li>
        </ul>
    </div>
</div>

我明白我首先加载js文件然后在指令方法中加载html内容的错误。

最佳答案

首先摆脱 custom.js,然后添加一个“nav”指令标签,如下所示:

<div id="sidebar-menu" >
    <div class="menu_section">
        <h3>General</h3>
        <nav></nav>
    </div>
</div>

然后构建 nav.html

<ul class="nav side-menu">
  <li ng-click="">
    <a href="index3.html">Dashboard</a>
  </li>
  <li>
    <a href="form_advanced.html">Advanced Components</a>
  </li>
</ul>

然后创建导航指令

app.directive('nav', function() {
  return {
    restrict: 'EA',
    template: 'nav.html',
    link: function(scope, element, attrs) {
      element.find('li').click(function () {
        var $this = $(this); // optimize

        if ($this.is('.active')) {
            $this.removeClass('active');
            //$('ul', this).slideUp(); ? not sure what you're doing here?
            $this.removeClass('nv');
            $this.addClass('vn');
        } else {
            $this.find('ul').slideUp();
            $this.removeClass('vn');
            $this.addClass('nv');
            //$('ul', this).slideDown(); ? not sure what you're doing here?
            element.find('li').removeClass('active');
            $this.addClass('active');
        }
      }); 
    }
  }
});

我还没有测试过代码,但这是您需要做的要点。

当您需要操作 dom 时,您应该创建一个指令并使用“link”函数,该函数将传递范围、元素(指令的轻量 jquery 包装的 dom 元素)和属性。从那里您可以执行所需的任务。还要确保有一个全局 jQuery 对象“$”,Angular 确实附带了一个 jqLit​​e 版本作为 angular.element *不要与链接函数中传递的“元素”混淆,但是 lite 版本没有所有您可能需要的附加功能。

关于javascript - Angularjs +指令文件html内容点击事件在js文件中不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35367595/

相关文章:

php - 根据所选 div 提交颜色

javascript - 如何获取数据列表的更改事件?

c# - 如何更改 HTML 标签的样式

php - AJAX responseText 在对 .php 的 GET 请求后未定义

javascript - Three.js 阴影不起作用

javascript - 可以通过JavaScript获取CPU或主板序列号吗

javascript - 如何检查 ul 中每个 li 文本的颜色?

javascript - 使用 filter() 从 DOM 中删除元素时遇到一些问题

javascript - 修改基础 form.reset() 值

javascript - 使用纯 AngularJs 附加元素