2014-11-13 24 views
5

Tôi đang xây dựng một ứng dụng web và tôi đang sử dụng góc cạnh lần đầu tiên. Tôi đã thử ngày hôm qua để lấy dữ liệu từ một API nhưng nó sẽ không hoạt động trong nguyên nhân Góc của các hạn chế nguồn gốc chéo. May mắn tôi có thể có được ngày tháng qua một yêu cầu CURL đơn giản trong PHP.Chuyển biến số php sang góc

Vì vậy, bây giờ tôi đang ở đây. Tôi có dữ liệu JSON trong biến PHP và muốn sử dụng dữ liệu này trong Ứng dụng góc của tôi. Làm thế nào tôi có thể đạt được điều đó? Có cách nào để truyền dữ liệu trực tiếp đến góc? Hoặc tôi nên tạo một tập tin json với php và sau đó tải nó vào funcion của tôi? Những đề nghị của bạn là gì?

Tôi muốn điền vào $ scope.posts với nội dung của biến $ $ content.

Dưới đây là đoạn code php:

<?php 


     /* gets the data from a URL */ 
     function get_data($url) { 
     $ch = curl_init(); 
     $timeout = 5; 
     curl_setopt($ch, CURLOPT_URL, $url); 
     curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); 
     curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, $timeout); 
     $data = curl_exec($ch); 
     curl_close($ch); 
     return $data; 
     } 

     $returned_content = get_data('http://fingerzeig.ch/api/agenda/list'); 
     $content = json_decode($returned_content); 
     //print_r ($content); 

     //Get first title 
     //$firstitle = $content[0] -> ID; 

     //print_r($firstitle); 



     ?> 

Mã kiễu góc:

//MYAPP 

var app = angular.module("MyApp", []); 


app.controller("PostsCtrl", function($scope, $http) { 
    $http.get(' WHAT SHOULD GO HERE? '). 
    success(function(data, status, headers, config) { 
    console.log("success!"); 
    console.log(data); 
     $scope.posts = data; 
    }). 
    error(function(data, status, headers, config) { 
     // log error 
    }); 
}); 
+0

Bạn có quyền kiểm soát API để cho phép truy cập vào ứng dụng Góc của bạn không? –

+0

@SteveAdams không, tôi không có quyền kiểm soát. Vì vậy, tôi có dữ liệu ở đây trên trang web của tôi đã có trong biến php này. Tôi có thể lặp lại nó và mọi thứ. Nhưng làm thế nào để làm việc với nó trong ứng dụng góc của tôi? – elpeyotl

Trả lời

9

bạn có thể cung cấp và thiết bị đầu cuối sử dụng apache và php để lấy dữ liệu từ máy chủ của riêng bạn:

$http.get('/endpoint', function() { ... }); 

Bạn cũng có thể làm điều gì đó đôi khi được gọi là dữ liệu 'bootstrapping' vào DOM. Điều này hoạt động tốt - tôi thường làm điều đó để đảm bảo tải trang đầu tiên của một ứng dụng trang đơn không yêu cầu phải đợi dữ liệu ban đầu.Mọi thứ cho tải trang đầu tiên được thiết lập trên máy chủ và được đưa vào trang để ứng dụng thu thập mà không yêu cầu thêm:

Để thực hiện việc này, bạn có thể tạo bộ sưu tập trên cửa sổ hoặc phạm vi toàn cầu như sau:

window.myPostData = "<?php echo $data; >"; 

Rồi sau này trong ứng dụng của bạn, bạn thường có thể mong đợi các đối tượng cửa sổ (hoặc bất kỳ biến toàn cầu) có sẵn trong trình duyệt bất cứ lúc nào vì thế nó sẽ có thể truy cập như thế này:

app.controller("PostsCtrl", function($scope) { 
    var posts = window.myPostData; 
}); 

Tuy nhiên, bạn có thể muốn có thể truy cập fres dữ liệu h là tốt, vì vậy bạn có thể muốn thử một cái gì đó như thế này:

// If $data is empty, set myPostData to false. 
window.myPostData = <?php echo empty($data) ? 'false' : $data; >; 

... 

app.controller("PostsCtrl", function($scope, $http) { 
    var posts = window.myPostData; 

    // Set myPostData to false so future use of this controller during this 
    // request will fetch fresh posts. 
    window.myPostData = false; 

    // Now if we didn't bootstrap any posts, or we've already used them, get them 
    // fresh from the server. 
    if (!posts) { 
     $http.get('/endpoint', function() { 
      ... 
     }); 
    } 
}); 

Tâm trí bạn, nếu bạn không có sự hiểu biết về cách thiết lập một thiết bị đầu cuối sử dụng apache và php, bạn sẽ muốn gắn bó với chỉ bootstrapping dữ liệu vào cửa sổ hoặc một biến toàn cầu. Nó không lý tưởng, nhưng nó sẽ hoạt động.

+0

Cảm ơn lời giải thích rõ ràng này. Điều này có thể giúp tôi! – elpeyotl

+0

Bạn được chào đón - Cảm thấy tự do để yêu cầu trợ giúp thêm nếu có điều gì đó quá mơ hồ. –

+0

thực sự vấn đề ở đây là các biến toàn cầu không phải là một ý tưởng tốt, tôi muốn gán nó như là biến riêng tư, bất kỳ ý tưởng về điều đó? –

0

Vì bạn đã nhận được dữ liệu JSON, chỉ ra các dữ liệu JSON. Không cần phải làm json_decode.

Vì vậy, chỉ echo $returned_content

Edit:

Phần, nơi bạn có $http.get(' WHAT SHOULD GO HERE? ') trong mã kiễu góc của bạn phải trỏ đến URL tương đối của các trang PHP. ví dụ. Nếu trang PHP của bạn được truy cập tại http://server.com/webapp/get_data.php thì góc của bạn sẽ là $http.get('/webapp/get_data.php')

+0

Tôi biết điều này. Tôi có thể làm việc với dữ liệu này trên trang web của tôi bằng php. Nhưng làm thế nào tôi có thể nhận được dữ liệu này để sử dụng nó trong ứng dụng góc của tôi? – elpeyotl

+0

Xem câu trả lời đã chỉnh sửa của tôi – creanium

0

Bạn có thể ép nó vào phạm vi như thế này, không chắc chắn nếu nó là thực hành tốt nhất nhưng ya ... Hoặc bạn có thể có bộ điều khiển góc gọi đến một hàm php trong một

$http.get('func').then(function(data) { 
//do stuff 
}); 

hay chỉ là xô nó trên phạm vi

<input ng-model="myContent" value="<?php echo $returned_content?>"/> 
4

Cảm ơn mọi người đã giúp đỡ của bạn. Nó hoạt động và giải pháp rất đơn giản.

Tôi đã tạo một biến trong Javascript nhận nội dung trả về của PHP.

var thedata = <?php echo $returned_content;?>; 

Sau đó tôi đặt biến này trong tập tin ứng dụng góc của tôi:

//MYAPP 

var app = angular.module("MyApp", []); 

app.controller("PostsCtrl", function($scope) { 
    $scope.posts = thedata; 
    console.log(thedata); 
}); 

tôi có thể truy cập dữ liệu này ngay bây giờ trong tôi ng-repeat.

<body ng-app="MyApp"> 
    <div ng-controller="PostsCtrl"> 
    <ul ng-repeat="post in posts"> 
     <li>{{post.ID}}</li> 
    </ul> 
    </div> 
</body> 

Nó hoạt động ngọt ngào! Giải pháp rất đơn giản.

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