2012-07-03 12 views
16

Tôi có một trang chứa 2 bộ điều khiển: một bộ điều khiển danh sách 'ứng dụng', và một cái khác để đặt mẫu Góc mới vào bên trongHTML của phần tử Div của nó.Tải mẫu AngularJS trong trang, tự động

<div ng-controller="appList"></div> 
<div ng-controller="appPane"> Dynamic content should be loaded here! </div> 

Tôi đã thử bằng cách sử dụng chuẩn {{biểu}} cam kết ràng buộc, nhưng họ không làm việc với html, tôi cũng đã thử các ng-bind-html-không an toàn chỉ thị (Binding innerHTML như của App yêu cầu trả lại) nhưng bộ điều khiển không được thực hiện trong mã mới này.

Vấn đề có vẻ là bằng cách sử dụng Ràng buộc, Góc không phân tích cú pháp nội dung của html được đề cập để sử dụng nó làm ứng dụng góc. Bất kỳ ý tưởng nào về cách làm cho nó phân tích cú pháp nội dung động?

+1

Ứng dụng góc riêng biệt 'ứng dụng' (mỗi ứng dụng có khai báo 'ng-app'?) Hoặc chỉ các bộ điều khiển/lượt xem khác nhau cho cùng một ứng dụng? Nếu chỉ có các bộ điều khiển/chế độ xem khác nhau, tôi sẽ sử dụng appList làm điều hướng của bạn và thiết lập '$ routeProviders' (http://docs.angularjs.org/api/ng.$routeProvider) để quản lý các chế độ xem khác nhau. –

+0

Có lẽ là một giải pháp tốt hơn so với cái tôi đang cố gắng, nhưng tôi vẫn còn mới với Angular, vì vậy tôi sẽ thử nó. Cảm ơn. – Zoey

Trả lời

4

Hãy nhìn vào các uiRouter mô-đun (từ dự án AngularUI). Nó cho biết thêm khái niệm về các trạng thái, tương tự như các tuyến đường, nhưng với các tính năng khác, chẳng hạn như khả năng lồng chúng. Ví dụ:

$stateProvider 
    .state('myState', { 
     url: '/mystate', 
     templateUrl: '...', 
     controller: 'MyCtrl' 
    }) 
    .state('myState.substate', { 
     url: '/{substate}', 
     templateUrl: '...', 
     controller: 'MySubCtrl' 
    }); 

MySubCtrl sẽ được kích hoạt bất cứ khi nào bạn đi đến /mystate/something và bạn có thể sử dụng "cái gì đó" như một tham số (xem $stateParams). Bạn có thể lồng các trạng thái vào bất kỳ mức độ nào.

+0

Âm thanh đó thực sự hữu ích! Câu trả lời của tôi là từ sự phát triển ban đầu của Angular, điều này đã không tồn tại- Những người khác cảm thấy tự do để bình luận nếu điều này không đúng, nhưng tôi cảm thấy đây là câu trả lời đúng. Đã chấp nhận. – Zoey

+1

Tôi rất vui vì những điều này (hệ sinh thái AngularJS) đang phát triển theo cách của chúng. –

+0

Để ghi lại, tôi đã thử giải pháp này trong các dự án của riêng tôi và nó cực kỳ hữu ích. Có một số vấn đề, chẳng hạn như điều hướng đến các tuyến không tồn tại dẫn đến lỗi, nhưng tôi cá cược rằng ẩn trong tài liệu có độ sâu vừa phải là phương tiện phát hiện khi tuyến đường không tồn tại để có thể xử lý. Như một kịch bản chung, tôi khuyên bạn nên giải pháp này cho bất kỳ ai cố gắng sử dụng các tuyến đường và tôi khuyên bạn nên bỏ qua nhà cung cấp Tuyến đường chính thức từ Angular, vì đây là giải pháp mạnh mẽ hơn rất nhiều. – Zoey

25

Dường như dịch vụ biên dịch $, khi nạp các phần tử bạn muốn biên dịch lại cùng với phạm vi hiện tại của bạn, thực hiện những gì tôi đang tìm kiếm.

Ví dụ từ nguồn của tôi:

var appPane = $('#AppPane');//JQuery request for the app pane element. 
appPane.html(data);//The dynamically loaded data 
$compile(appPane.contents())($scope);//Tells Angular to recompile the contents of the app pane. 

Điều này sẽ giúp bất cứ ai gặp vấn đề của tôi, tôi hy vọng.

6

Nhìn vào $routes và ngView trong angularjs.

Dưới đây là một ví dụ rất cơ bản:

http://jsfiddle.net/pXpja/3/

+0

Đây là thay thế 'chính thức', nhưng hiện không hoạt động trong các tình huống yêu cầu cấu trúc bộ điều khiển lớp như trong vấn đề ban đầu của tôi. – Zoey