AngularJS-directive自定义指令与link绑定事件

directive指令,link绑定事件($apply这种方式只需要改变页面的调用方法即可)

/**
 * Created by GrandKai on 29/09/2016.
 */
var app = angular.module("app", []);
app.controller("foodCtrl", function ($scope) {
    $scope.loadMoreData =  function () {
        alert("加载更过数据。。");
    }
    $scope.delData =  function () {
        alert("删除数据。。");
    }
});

app.directive("enter", function () {
    // 只有一个link函数可以直接返回function
    return function (scope, element, attrs) {
        element.bind("mouseenter", function () {
            // scope.$apply("loadMoreData()");
            scope.$apply(attrs.enter);//调用更叫灵活
        });
    }

});

app.directive("food", function () {
    return {
        restrict: "E", // 不写默认是A属性
        template: "hello angular",
        replace:true,//默认false,作用:取代food标签元素(页面不显示)
        scope: {},//需要清空scope
        controller: function ($scope) {
            $scope.foods = [];
            this.addApple = function () {
                $scope.foods.push("apple");
            };
            this.addOrange = function () {
                $scope.foods.push("orange");
            };
            this.addBanana = function () {
                $scope.foods.push("banana");
            }
        },
        link: function (scope, element, attrs) {
            element.bind("mouseenter", function () {
                console.log(scope.foods);
            });
        }
    }
});

app.directive("apple", function () {
    return {
        require: "food",
        // foodCtrl 指向food中定义的controller
        link: function (scope, element, attrs, foodCtrl) {
            foodCtrl.addApple();
        }
    }
});

app.directive("orange", function () {
    return {
        require: "food",
        // foodCtrl 指向food中定义的controller
        link: function (scope, element, attrs, foodCtrl) {
            foodCtrl.addOrange();
        }
    }
});

app.directive("banana", function () {
    return {
        require: "food",
        // foodCtrl 指向food中定义的controller
        link: function (scope, element, attrs, foodCtrl) {
            foodCtrl.addBanana();
        }
    }
});

html代码

<!DOCTYPE html>
<html lang="en" ng-app="app">
<head>
    <meta charset="UTF-8">
    <title>todolist</title>
    <script src="js/angular.min.js"></script>
    <link rel="stylesheet" href="bootstrap/css/bootstrap.min.css">
</head>
<body>

<div class="container" ng-controller="foodCtrl">
    <food apple banana orange>所有食物</food>
    </br>
    <food apple banana>所有食物</food>
    </br>

    <div enter>im here1</div>
    </br>
    <div enter="loadMoreData()">im here2</div>
    </br>
    <div enter="delData()">im here3</div>
</div>


<script type="text/javascript" src="food.js"></script>
</body>
</html>
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值