Tôi có ứng dụng Angular 1.x, mà tôi đang cố gắng cập nhật lên thiết kế material design với sự trợ giúp của Polymer 1.0. Tôi phải nói rằng tôi chỉ sử dụng các yếu tố giấy như các khối xây dựng thông thường và tôi không viết bất kỳ mã Polymer tùy chỉnh nào.Trộn Polymer 1.0 và Góc 1.x
Cho đến nay, tôi đã gặp phải 2 vấn đề, cả hai giao dịch với các phần tử Polymer lồng nhau, vì vậy tôi đoán giải pháp sẽ giống hoặc ít nhất là rất giống nhau.
Vấn đề 1
Sử dụng ng-repeat
trên paper-item.
HTML code (với cú pháp templating góc)
<paper-item data-ng-repeat="event in events">
<paper-item-body two-line>
<div>{{event.title}}</div>
<div secondary>{{event.description}}</div>
</paper-item-body>
</paper-item>
Các mã sau đây không chạy như nó tạo ra các lỗi sau:
TypeError: Cannot read property 'childNodes' of undefined
at g (angular.js:7531)
at g (angular.js:7531)
at N (angular.js:8127)
at g (angular.js:7527)
at angular.js:7402
at $get.h (angular.js:7546)
at m (angular.js:8159)
at angular.js:27052
at Object.fn (angular.js:15474)
at m.$get.m.$digest (angular.js:15609)
Tuy nhiên, nếu tôi sử dụng đoạn mã sau, mã không chạy mà không có lỗi:
<div data-ng-repeat="event in events">
<paper-item-body two-line>
<div>{{event.title}}</div>
<div secondary>{{event.description}}</div>
</paper-item-body>
</div>
Lưu ý rằng tôi chỉ thay đổi phần tử gốc (từ paper-item
thành div
).
Vấn đề 2
Cố gắng sử dụng google-map để hiển thị một điểm đánh dấu trên bản đồ. Trung tâm bản đồ, nhưng không có điểm đánh dấu.
HTML code (với cú pháp templating góc)
<google-map latitude="{{event.y_wgs}}" longitude="{{event.x_wgs}}">
<google-map-marker latitude="{{event.y_wgs}}" longitude="{{event.x_wgs}}"></google-map-marker>
</google-map>
đầu ra HTML (như biên soạn bởi góc trong thời gian chạy):
<google-map latitude="12.345" longitude="12.345">
<google-map-marker latitude="NaN" longitude="NaN"></google-map-marker>
</google-map>
Thông báo thẻ nội google-map-marker
có NaN
như vĩ và kinh độ, trong khi bên ngoài google-map
hoạt động như dự định. Điều này giải thích tại sao bản đồ tập trung OK, nhưng không có điểm đánh dấu nào.
TL; DR
yếu tố làm tổ Polymer và sử dụng cú pháp đúp ria mép góc có lẽ gây ra xung đột, như các yếu tố bên trong Polymer đối xử với nó như mã Polymer và không mã kiễu góc.
Bất kỳ ý tưởng nào về cách giải quyết vấn đề này?
Vấn đề đầu tiên của bạn có thể liên quan đến shimDOM shim. Khi bạn soạn mọi thứ thành phần tử Polymer một cách bất hợp pháp, bạn phải sử dụng API 'Polymer.dom' để thỏa mãn ShadyDOM (mà Angular không). Hãy thử chạy ví dụ của bạn trên Chrome, nhưng đặt 'window.Polymer.dom = true' trước khi nhập Polymer để xem nó có hoạt động dưới Shadow DOM gốc hay không. Ngoài ra, Polymer sẽ chỉ hành động trên cú pháp '{{}} 'trong ngữ cảnh của một khuôn mẫu mà nó xử lý. –
Cảm ơn bạn đã bình luận. Tôi đang sử dụng Chrome, nhưng khi tôi đặt 'window.Polymer.dom = true' ở các vị trí khác nhau, không có gì xảy ra. Ngoại trừ nếu tôi đặt nó sau khi bao gồm các phần tử Polymer, sau đó tôi nhận được nhiều lỗi với nội dung sau: 'Polymer.dom không phải là một chức năng'. – alesc
Không đặt 'window.Polymer.dom = true' trong _various places_ :), chỉ đặt trước khi nhập Polymer. Nếu nó không có hiệu lực, thì tôi không biết vấn đề là gì. –