2013-08-07 32 views
8

Tôi đang tìm cách lấy dữ liệu ban đầu từ DOM sau khi ứng dụng được tải. Dữ liệu đã được chèn vào trong một khung nhìn bởi một máy chủ. Phương pháp value của Module có phải là một cách hay không?AngularJS - Lấy dữ liệu được chèn vào dom

Tôi cũng muốn biết cách lấy dữ liệu từ chế độ xem khi tôi đang làm việc với routes, tôi có thể sử dụng các thẻ script để tiêm dữ liệu trong phạm vi cụ thể không?

Tôi đã thấy thisthis câu hỏi nhưng nó không giúp ích nhiều.

+1

bản sao có thể có của [tải dữ liệu ban đầu trong angularjs] (http://stackoverflow.com/questions/18086823/initial-data-loading-in-angularjs) –

Trả lời

16

1) giải pháp đầu tiên lấy cảm hứng từ this question và nó là Module's value method:

<script> 
    var users_json = '[{"name":"Piotr"},{"name":"Natasha"}]'; // created by xsl 
    myApp.value("PrimaryData" , users_json); 
</script> 
<ul> 
    <li ng-repeat="user in users">{{user.name}}</li> 
</ul> 

Sau đó, chúng ta có thể sử dụng này PrimaryData khi nào và nơi chúng ta muốn, như thế này:

myApp.controller('MainCtrl', function($scope, PrimaryData) { 
    $scope.data = angular.copy(PrimaryData); 
    console.log($scope.data[0].name === "John"); 
}); 

Nhưng cách này bằng cách nào đó không làm việc cho tôi khi tôi bắt đầu sử dụng routes, có thể là do value chỉ chạy trong khi khởi tạo ứng dụng.

2) Vì vậy, ở đây có giải pháp thứ hai: chỉ thị. Bây giờ khi máy chủ gửi mẫu của một tuyến đường, nó đặt bên trong một số script thẻ với một loại "text/template" và đặc biệt sở hữu tên chỉ thị và dữ liệu json trong thẻ đó, như thế này:

<script type = "text/template" rawdata >  <!-- "rawdata" is our directive 
    '[{"name":"Nelson"},{"name":"Luis"}]'  // created by xsl 
</script> 
<ul> 
    <li ng-repeat="user in users">{{user.name}}</li> // view is beside 
</ul> 

Và chỉ thị này bắt nó và chuyển dữ liệu với phạm vi tuyến đường hiện tại ':

studio.directive('rawdata', function() { 
    return { 
    link: function(scope, element, attr, ctrl) { 
     if(scope.passRawData){ 
      var data = (element[0].innerHTML); 
      scope.passRawData(data); // Or simply scope.users = JSON.parse(data) 
     } else { 
      console.log("Scope has no passRawData method"); 
     } 
    } 
    } 
}); 

Tuyệt vời! :)

+6

cảm ơn cho phương pháp tiếp cận chỉ thị, đó là thông minh. –

+0

Tôi chỉ sử dụng giải pháp chỉ thị và cảm ơn tuyệt vời. Nhưng tôi đã phải loại bỏ các dấu nháy đơn xung quanh JSON trong thẻ script. Điều gì khiến bạn đặt chúng ở đó? – Gaz

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