Cú pháp đúng của ng-gộp là gì?


398

Tôi đang cố gắng bao gồm một đoạn mã HTML bên trong một ng-repeat, nhưng tôi không thể làm cho bao gồm hoạt động. Có vẻ như cú pháp hiện tại ng-includekhác với những gì trước đây: Tôi thấy nhiều ví dụ sử dụng

<div ng-include src="path/file.html"></div>

Nhưng trong các tài liệu chính thức , nó nói để sử dụng

<div ng-include="path/file.html"></div>

Nhưng sau đó xuống trang nó được hiển thị là

<div ng-include src="path/file.html"></div>

Bất kể, tôi đã cố gắng

<div ng-include="views/sidepanel.html"></div>
<div ng-include src="views/sidepanel.html"></div>
<ng-include src="views/sidepanel.html"></ng-include>
<ng-include="views/sidepanel.html"></ng-include>
<ng:include src="views/sidepanel.html"></ng:include>

Đoạn mã của tôi không có nhiều mã, nhưng nó đã xảy ra rất nhiều; Tôi đọc trong Mẫu tải động bên trongng-repeat có thể gây ra sự cố, vì vậy tôi đã thay thế nội dung sidepanel.htmlchỉ bằng từ foovà vẫn không có gì.

Tôi cũng đã thử khai báo mẫu trực tiếp trong trang như thế này:

<script type="text/ng-template" id="tmpl">
    foo
</script>

Và chạy qua tất cả các biến thể của việc ng-includetham chiếu kịch bản id, và vẫn không có gì.

Trang của tôi có nhiều hơn trong đó, nhưng bây giờ tôi đã gỡ nó xuống chỉ còn này:

<!-- index.html -->
<html>
<head>
<!-- angular includes -->
</head>
<body ng-view="views/main.html"> <!-- view is actually set in the router -->
    <!-- views/main.html -->
    <header>
        <h2>Blah</h2>
    </header>
    <article id="sidepanel">
        <section class="panel"> <!-- will have ng-repeat="panel in panels" -->
            <div ng-include src="views/sidepanel.html"></div>
        </section>
    </article>
<!-- index.html -->
</body>
</html>

Tiêu đề hiển thị, nhưng sau đó mẫu của tôi không. Tôi không gặp lỗi trong bảng điều khiển hoặc từ Node và nếu tôi nhấp vào liên kết trong src="views/sidepanel.html"các công cụ dev, nó sẽ đưa tôi đến mẫu của tôi (và hiển thị foo).

Câu trả lời:


775

Bạn phải trích dẫn srcchuỗi của bạn bên trong dấu ngoặc kép:

<div ng-include src="'views/sidepanel.html'"></div>

Nguồn


4
vâng, cái này cắn tôi ngày khác. Một số câu trả lời có liên quan stackoverflow.com/questions/13811948/ từ
jaime

60
Lý do cho điều này là bất kỳ chuỗi nào trong thẻ ng trên thực tế được đánh giá là biểu thức góc. '' nói với nó rằng đó là một biểu thức chuỗi.
Gepsens

37
@Gepsens: nó có ý nghĩa một khi bạn biết. Nó sẽ là tốt đẹp nếu tài liệu đề cập đến nó khám phá mặc dù.
jacob

1
Vâng bây giờ tôi biết tại sao họ nói "chuỗi" ... Cảm ơn + jacob vì đã tìm thấy
Shadoweb

7
Tôi đồng ý, chúng tôi chắc chắn cần một nỗ lực tài liệu về Angular và một hệ thống bố trí.
Gepsens

134
    <ng-include src="'views/sidepanel.html'"></ng-include>

HOẶC LÀ

    <div ng-include="'views/sidepanel.html'"></div>

HOẶC LÀ

    <div ng-include src="'views/sidepanel.html'"></div>

Những điểm cần nhớ:

-> Không có khoảng trắng trong src

-> Nhớ sử dụng trích dẫn đơn trong trích dẫn kép cho src


8
Các ng-include="'...'"cú pháp chắc chắn sẽ tốt hơn.
Cầu tàu-Luc Gendreau

vì vậy tôi cho rằng ng-include không tồn tại ở định dạng bình luận?
OzzyTheGiant

50

Đối với những sự cố khi chụp, điều quan trọng là phải biết rằng ng-include yêu cầu đường dẫn url phải từ thư mục gốc của ứng dụng chứ không phải từ cùng thư mục nơi part.html sống. (trong khi part.html là tệp xem có thể tìm thấy thẻ đánh dấu ng-nội tuyến).

Ví dụ:

Đúng: div ng-gộp src = "'/view/partials/tabSlides/add-more.html'">

Không chính xác: div ng-gộp src = "'add-more.html'">


6
Trên thực tế, điều này không chính xác: đường dẫn CÓ THỂ là tương đối, nhưng nó liên quan đến tệp html mà ứng dụng được khởi tạo. Trong ví dụ "không chính xác" của bạn, điều đó sẽ hoạt động nếu add-more.htmltrong cùng thư mục với app.html. Trong câu trả lời của tôi, views/là trong cùng thư mục với app.html.
jacob

Trong trường hợp với Laravel và đặt cấu trúc vào thư mục chung (công khai / ứng dụng / mẫu / bao gồm) và tệp gọi là (công khai / ứng dụng / mẫu / index.php), đường dẫn bao gồm cần có (ứng dụng / mẫu / bao gồm /filetoinclude.php). Tôi không thể có được liên quan đến công việc.
Jason Spick

10

Đối với những người đang tìm kiếm giải pháp "trình kết xuất vật phẩm" ngắn nhất có thể từ một phần, do đó, một kết hợp ng-repeat và ng-include :

<div ng-repeat="item in items" ng-include src="'views/partials/item.html'" />

Trên thực tế, nếu bạn sử dụng nó như thế này cho một bộ lặp, nó sẽ hoạt động, nhưng sẽ không cho 2 người trong số họ! Angular (v1.2.16) sẽ phát điên vì một số lý do nếu bạn có 2 cái này sau cái kia, vì vậy sẽ an toàn hơn khi đóng div theo cách pre-xhtml:

<div ng-repeat="item in items" ng-include src="'views/partials/item.html'"></div>


đây là những năm sau đó, nhưng đây chính xác là những gì tôi cần để làm việc trong một <tbody ng-repeat="item in vm.items" ng-include="vm.searchTemplateBodyUrl" ng-cloak>. Cảm ơn!
Eric D. Johnson

9

Có lẽ điều này sẽ giúp cho người mới bắt đầu

<!doctype html>
<html lang="en" ng-app>
  <head>
    <meta charset="utf-8">
    <title></title>
    <link rel="icon" href="favicon.ico">
    <link rel="stylesheet" href="custom.css">
  </head>
  <body>
    <div ng-include src="'view/01.html'"></div>
    <div ng-include src="'view/02.html'"></div>
    <script src="angular.min.js"></script>
  </body>
</html>

7

Điều này làm việc cho tôi:

ng-include src="'views/templates/drivingskills.html'"

hoàn thành div:

<div id="drivivgskills" ng-controller="DrivingSkillsCtrl" ng-view ng-include src="'views/templates/drivingskills.html'" ></div>

2
Bạn không nên kết hợp ng-viewng-incluetrên cùng một yếu tố; src (xem templateUrl ) nên được cấu hình trong bộ định tuyến của bạn.
jacob

@jacob vậy bạn sẽ tải cái này như thế nào ?? bởi vì tôi có thể tải chế độ xem của mình và tôi có thể kích hoạt bộ điều khiển của mình, nhưng chúng không được kết nối, xem tải trống
Sonic Soul

@SonicSoul sử dụng ngRouter và đặt nó làm mẫu. Hoặc nếu bạn muốn sử dụng thông số tuyến đường trong đường dẫn, chỉ cần sử dụng nó như một biểu thức JavaScript:someVar + 'some string'
jacob

@jacob tôi đã sử dụng ngRouter nhưng tôi không biết cách tải tuyến đường đó trong ng-gộp .. nếu tôi sử dụng tuyến đường trong src = nó chỉ tải toàn bộ trang web chứ không chỉ là chế độ xem :( nếu tôi tải nó bằng đường dẫn tương đối html, nó không tải bộ điều khiển với chế độ xem
Sonic Soul

@SonicSoul bạn đang cố tải một mẫu được lồng trong chế độ xem đang tải qua ngRouter? Nếu vậy, tôi nghĩ rằng giá trị bạn cung cấp cho src phải là một đường dẫn tuyệt đối trong cấu trúc thư mục của dự án của bạn (không phải là tuyến ứng dụng). Nếu bạn đang cố gắng đặt mẫu tuyến đường bằng ngInclude, điều đó sai. Ngoài ra, đây là 6 năm trước và tôi đã không sử dụng AngularJS trong hơn 3 năm.
jacob

0

thử cái này

<div ng-app="myApp" ng-controller="customersCtrl"> 
  <div ng-include="'myTable.htm'"></div>
</div>

<script>
var app = angular.module('myApp', []);
app.controller('customersCtrl', function($scope, $http) {
    $http.get("customers.php").then(function (response) {
        $scope.names = response.data.records;
    });
});
</script>

-1

Trên ng-build, không tìm thấy tệp (404). Vì vậy, chúng ta có thể sử dụng mã dưới đây

<ng-include src="'views/transaction/test.html'"></ng-include>

Thay vì,

<div ng-include="'views/transaction/test.html'"></div>
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.