AngularJs-指令和控制器交互


前言:

  前段時間我們學習了angular的指令,他通過ECMA的方式創建元素,可以讓我們共用這些元素,我們也知道可以通過 link的方法給這個指令添加一些動作事件,本節,我們將寫入和讓angular的指令能和控制器進行交互。

1,指令和控制器的交互

<!DOCTYPE html>
<html ng-app="MyController">
<head>
    <meta charset="utf-8">
    <title>指令復用</title>
</head>
<body>
    <div ng-controller="MyCtrl">
        <loader>滑動加載</loader>
    </div>
</body>
<script src="js/angular-1.3.0.js"></script>
<script src="js/directive-controller.js"></script>
</html>

上面的代碼平淡無奇,有個控制器有個指令(loader),下面可以看到我們通過 directive創建了這個指令,並且我們通過link的方法給他賦值鼠標事件(mouseenter)。

var myModule = angular.module('MyController',[]); myModule.controller('MyCtrl',function($scope){ $scope.loadData = function(){ console.log("加載數據..."); } }) myModule.directive('loader',function(){ return{ restrict:'AE', link:function(scope,element,attr){ element.bind('mouseenter',function(){ scope.loadData(); }) } } })

 

我們來看看運行的結果,ok,我們打印出來 ”加載數據...“。

2,多個控制器如何公用一個指令?

  我們創建指令的目的就是在於,能夠復用它,當然這也是MVC的終極思想。

  我們的代碼也發生了一些變化

<!DOCTYPE html>
<html ng-app="MyController">
<head>
    <meta charset="utf-8">
    <title>指令復用</title>
</head>
<body>
    <div ng-controller="MyCtrl">
        <loader loadDataFn="loadData()">滑動加載</loader>
    </div>
    <div ng-controller="MyCtr2">
        <loader loadDataFn="loadData2()">滑動加載2</loader>
    </div>
</body>
<script src="js/angular-1.3.0.js"></script>
<script src="js/directive-controller.js"></script>
</html>

首先,我們創建了兩個控制器 MyCtr1 和 MyCtr2,同時呢,我們給 loader 這個指令,加了一個自定義的屬性叫 loadDataFn,給他賦的值是下面js中的兩個對應控制器中的方法loadData()和loadData2();

var myModule = angular.module('MyController',[]); myModule.controller('MyCtrl',function($scope){ $scope.loadData = function(){ console.log("加載數據..."); } }) myModule.controller('MyCtr2',function($scope){ $scope.loadData2 = function(){ console.log("加載數據2..."); } }) myModule.directive('loader',function(){ return{ restrict:'AE', link:function(scope,element,attr){ element.bind('mouseenter',function(){ // scope.loadData();
                // scope.$apply("loadData()");
 scope.$apply(attr.loaddatafn); }) } } })

當然,在指令的 link方法中我們也做了改變,link方法呢,給我提供了四個參數:scope、element、attr和父控制器。我們給元素綁定事件也是通過參數中的 element.bind()完成的,我們也可以通過 attr 屬性獲取指令上的屬性,然后通過$apply的方法來完成調用就好了。在此要提交大家的是,我們在獲取指令元素上的屬性的時候,一定要注意,我們要把屬性的名字寫成小寫的,這是angularJS的坑。

  


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM