搜尋

首頁  >  問答  >  主體

angular.js - 關於 AngularJs 的指令的一個問題

HTML 程式碼

<p ng-controller="MainController">
    control:<input type="text" ng-model="testname" />
    directive:<xingoo name="testname"></xingoo>
</p>

Angular 代碼

var myAppModule = angular.module('myApp', []);
myAppModule
        .controller('MainController', function($scope){
            $scope.testname = 'my name is xingoo';
        })
        .directive('xingoo', function(){
            return{
              restrict:'AE',
                scope:{
                    name:'='
                },
                template:'<input type="text" ng-model="name"/>',
                replace:true
            };
        });

在這兩段程式碼下,control 的輸入框被和指令的輸入框綁定到了一起,任意改變一邊的值都會引起另外一邊的改變。我的理解是這樣的,不知道對不對,希望大神能不吝賜教:

1.首先在控制器 MainController 中,我們透過 ng-model 將輸入框和 MainController 的當前作用域中的一個值 testname 進行了雙向綁定;

2.在指令中,我們指定了 scope:{name:'='},所以 Angular 會以變數的形式去綁定 name ,而 name 我們傳入的值是 testname;

3.所以,在 template:'' 實際上相當於 ;

4.因為指令會建立一個新的子作用域,而這個自作用域可以存取它的父級作用域,也就是控制器MainController 的$scope,所以相當於輸入框和我們的指令都被雙向綁定到了目前作用域的$scope.testname 上。

天蓬老师天蓬老师2821 天前494

全部回覆(1)我來回復

  • 巴扎黑

    巴扎黑2017-05-15 17:01:28

    說的不錯,專案中寫組件常會這樣用

    回覆
    0
  • 取消回覆