2015-07-11 18 views
6

Tôi đã viết hai chỉ thị. Một trong số đó được sử dụng để nhập số với các đơn vị (như "1m"):Vấn đề với hai chỉ thị trên cùng một mô hình

angular.module('ng', []) 
.directive('unit', function() { 
    return { 
     require: 'ngModel', 
     link: function (s, e, attributes, ngModel) { 
      ngModel.$parsers.push(function (i) { 
       return i + attributes.unit; 
      }); 

      ngModel.$formatters.push(function (i) { 
       return (i + '').replace(attributes.unit, ''); 
      }); 
     } 
    } 
}); 

thứ hai thay thế , với ., vì nhiều người ở châu Âu sử dụng một số thập phân dấu phẩy thay vì một dấu thập phân và tôi muốn tôi các giá trị được chuẩn hóa.

angular.module('ng', []) 
.directive('numberWithPoint', function() { 
    return { 
     require: 'ngModel', 
     link: function (s, e, attributes, ngModel) { 
      ngModel.$parsers.push(function (i) { 
       return i.replace(',', '.'); 
      }); 
     } 
    } 
}); 

Việc sử dụng sẽ là:

<input type="text" ng-model="howLongSomethingIs" unit="m" number-with-point /> m 

Vấn đề: chỉ thị unit hoạt động tuyệt vời nếu nó là một mình, nếu tôi thêm chỉ thị number-with-point, các unit mất không có tác dụng (giá trị hiển thị là dành cho ví dụ 1m không phải 1.

Tôi đã cố gắng làm rối tung tài sản priority trong đối tượng return, nhưng không có gì xảy ra.

Làm cách nào để hai chỉ thị này hoạt động cùng nhau?

Trong này jsfiddle, có vẻ như nó hoạt động, nhưng nó sử dụng Góc 1.2.1. Tôi đang sử dụng Góc 1.3.14. Có ai biết làm thế nào để làm cho jsfiddle sử dụng phiên bản khác?

+0

Bạn có thể kết nối một plunker/jsbin của hai chỉ thị này không? Điều đó chắc chắn sẽ giúp gỡ lỗi nó. –

+0

Ok, ý tưởng hay. Đợi một chút –

+0

Xem chỉnh sửa. Tôi đã thêm một số ý kiến ​​ –

Trả lời

1

Trong jsfiddle này, có vẻ như hoạt động, nhưng nó sử dụng Góc 1.2.1. Tôi đang sử dụng Góc 1.3.14. Có ai biết làm thế nào để làm cho jsfiddle sử dụng phiên bản khác?

Tôi chỉ chạy mã được cung cấp cục bộ trên Góc 1.3.15 - đã hoạt động tốt.

Nhập 123071823,1238 đánh giá là 123071823.1238m khi được liên kết với chế độ xem. Vì vậy, nó xuất hiện để được làm việc tốt (cuối cùng của tôi, và trong fiddle của bạn).

1.3.14 jsFiddle


tải một phiên bản khác nhau trên jsFiddle:

  1. Di góc từ 'tab Khung & Extensions
  2. Lấy phiên bản từ code.angularjs.org.
  3. Dán liên kết dưới dạng External resource trong jsFiddle.
+0

Cảm ơn bạn đã kiểm tra ... Tôi không biết mình đang làm gì khác trong mã sản xuất của mình. Nó thực sự gần như đơn giản như fiddle ... Có vẻ như tôi phải tìm kiếm sâu hơn. –

+0

Myeah. Tôi ước tôi có thể được hỗ trợ nhiều hơn ở đây, nhưng nó dường như chỉ hoạt động ™. –

+0

Xem câu trả lời của tôi ... Vâng, thực sự bạn đã giúp tôi - bởi vì nếu bạn chưa thử nghiệm nó với phiên bản Angular của tôi, tôi vẫn sẽ tìm lỗi trong mã chỉ thị và tôi sẽ không tìm ra đúng dung dịch. –

1

Lỗi đã được tìm thấy. Một điều vô cùng ngu ngốc. chỉ thị của tôi đã được khai báo trong hai tập tin riêng biệt, và mỗi người trong số họ bắt đầu với:

angular.module('nameOfMyApp.directives', []) 

Tất nhiên, tải một chỉ thị ghi đè các module nameOfMyApp.directives mỗi lần.

Tôi đã thay đổi nó để

angular.module('nameOfMyApp.directives') 

và bây giờ nó hoạt động tốt.

Các vấn đề liên quan