2016-06-03 18 views
5

Xin chào cái nào tốt hơn? Sự khác biệt là gì? Những ưu và khuyết điểm là gì?yêu cầu: ngModel so với phạm vi: {ngModel: '='} trên AngularJS Chỉ thị

Đây là mã so sánh giữa hai:

phạm vi: {ngModel: '='}

<!DOCTYPE html> 
<html> 
<script src="http://ajax.googleapis.com/ajax/libs/angularjs/1.4.8/angular.min.js"></script> 
<body> 

<div ng-app="app"> 

<input ng-model="code"></my-directive> 

</div> 
<script type="text/javascript"> 
    app = angular.module('app', []); 

    app.directive('input', function(){ 
    return { 
    scope: { 
    ngModel: '=' 
    }, 
    link: function(scope, element, attrs){ 
    scope.$watch('ngModel', function(value){ 
     console.log(value); 
    }) 
    } 
    } 
    }); 
</script> 
</body> 
</html> 

yêu cầu: 'ngModel',

<!DOCTYPE html> 
<html> 
<script src="http://ajax.googleapis.com/ajax/libs/angularjs/1.4.8/angular.min.js"></script> 
<body> 

<div ng-app="app"> 

<input ng-model="code"></my-directive> 

</div> 
<script type="text/javascript"> 
    app = angular.module('app', []); 

    app.directive('input', function(){ 
    return { 
    require: 'ngModel', 
    link: function(scope, element, attrs, ngModel){ 
     attrs.$observe('ngModel', function(value){ 
     scope.$watch(value, function(newValue){ 
      console.log(newValue); 
     }); 
     }); 
    } 
    } 
    }); 
</script> 
</body> 
</html> 

PS Xin lưu ý rằng cả hai mã đều giống nhau. Nhật ký trên giao diện điều khiển với giá trị của mô hình

+0

Ý kiến ​​không phải là sự xem xét của SO. – Rob

+0

"tốt hơn" -> bạn đang cố gắng làm gì? Sự khác biệt: 'require' cho bạn toàn bộ' NgModelController' (do đó bạn có thể cắm vào đường dẫn chuyển đổi và xác nhận của Angular), 'scope =' cho bạn một ràng buộc với cùng một biểu thức được sử dụng bởi 'ng-model' (và bên dưới 'NgModelController'). –

+0

Ưu và nhược điểm là gì? –

Trả lời

7

Với phạm vi: {ngModel: '='},

Nó tạo ra một chỉ thị với phạm vi cô lập, ở đây về cơ bản phạm vi đang bị cô lập và doesn nó' t được thừa kế từ phạm vi $ parent, nhưng các giá trị được chuyển vào chỉ thị được yêu cầu cho chỉ thị này. nếu bạn sử dụng '=' thì ràng buộc dữ liệu hai chiều của nó.

những ưu điểm và nhược điểm tốt tùy thuộc vào yêu cầu của bạn.

Ưu điểm:

  • không cần phải sử dụng $scope.$watch mọi thời gian, để cập nhật xem trong chỉ thị của bạn nếu giá trị của phạm vi mẹ biến thay đổi. '=' thực hiện công việc.
  • Nếu chỉ thị được sử dụng với phạm vi cách ly, nó sẽ hoạt động như reusable component, có thể sử dụng ở nhiều nơi trong ứng dụng của bạn. Các biến số
  • phạm vi được truyền cho phạm vi độc lập có thể được sử dụng trực tiếp ngay cả khi chức năng liên kết không tồn tại trong chỉ thị của bạn.

nhược:

  • Như phạm vi đang bị cô lập, sẽ không nhận được toàn bộ phạm vi biến/chức năng của bộ điều khiển cha mẹ.cần phải thông qua thông qua các định nghĩa chỉ thị chỉ
  • không thể có khả năng sử dụng các phương pháp tích hợp trong góc cho ng-mô hình hoặc ng-form để tạo api, ngFormController, ngModelController

với yêu cầu: 'ngModel '

Ưu điểm:

  • dễ dàng truy cập toàn bộ cha mẹVề phạm vi/chức năng khi được sử dụng trong chỉ thị lồng nhau
  • tốt để tạo plugin giúp mô đun và vì nó có quan hệ cha mẹ con
  • có thể sử dụng các phương pháp tích hợp góc cho ng-model hoặc ng - để tạo api ra khỏi chúng
  • hoạt động tốt với các sự kiện phát ra và phát sóng (publish-subscribe design pattern).

bất lợi

  • nên có link function trong trật tự để có được bộ điều khiển cha mẹ và các biến phạm vi và phương pháp của nó.
  • cần sử dụng $scope.$watch để cập nhật chế độ xem nếu các thay đổi của phạm vi cha mẹ thay đổi.
  • khi bộ điều khiển Cú pháp được sử dụng. cần có các phạm vi $ được xây dựng trong phạm vi như $ scope. $ watch và $ scope. $ trên $ scope. $ emit, vì nó sẽ bị xáo trộn trong bộ điều khiển hoặc liên kết liên quan đến việc sử dụng cả hai this$scope
Các vấn đề liên quan