2016-12-16 101 views
0

這是我的代碼,我試圖顯示JSON內容,當我在控制檯中檢查時,返回的data是整個html代碼,而不是json數據。我哪裏錯了?Angularjs:從本地json文件加載內容

<html ng-app="BooksApp"> 

<head> 
    <meta charset="utf-8"> 
    <title>Angular.js </title> 
    <link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.2/css/bootstrap.min.css"> 
    <script src="http://ajax.googleapis.com/ajax/libs/angularjs/1.2.26/angular.min.js"></script> 
    <script> 
     var BooksApp = angular.module('BooksApp', []); 
     BooksApp.controller("BookCtrl", ['$scope', '$http', function ($scope, $http) { 
      $http.get('books.json').success(function (data) { 
       $scope.books = data; 
       console.log(data); 
      }); 
    }]); 
    </script> 
</head> 

<body ng-controller="BookCtrl"> 
    <h2>Angular.js </h2> 
    <table> 
     <tr> 
      <th>Book Name</th> 
      <th>Book Price</th> 
     </tr> 
     <option ng-repeat="entry in books.books" value="{{entry.name}}">{{entry.name}}</option> 
    </table> 
</body> 

</html> 

books.json

{ 
    "books": [{ 
     "id": 2081, 
     "name": "python", 
     "price": "1000" 
    }, { 
     "id": 8029, 
     "name": "c++", 
     "price": "2000" 
    }], 
    "count": 2 
} 

Screenshot

app.js

var http = require('http'), 
    fs = require('fs'); 


fs.readFile('./index.html', function (err, html) { 
    if (err) { 
     throw err; 
    }  
    http.createServer(function(request, response) { 
     response.writeHeader(200, {"Content-Type": "text/html"}); 
     response.write(html); 
     response.end(); 
    }).listen(8000); 
}); 
+0

你是什麼意思是*「它是整個html代碼」*?顯示你所看到的樣本 – charlietfl

+0

@charlietfl我粘貼的第一個代碼! – MrRobot9

+0

@charlietfl:當我直接將$ scope.books分配給JSON – MrRobot9

回答

4

AngularJS用於創建SPA應用程序,您需要將它與後端分開運行。但是,你似乎使用節點來爲靜態文件提供服務,並且還想從中獲取book.json。

新的方法:

在服務器端,只需創建一個通過API返回book.json的API /books

var express = require('express'); 
var app = express(); 
fs = require('fs'); 

app.get('/books', function (req, res) { 
    fs.readFile('books.json', 'utf8', function (err,data) { 
     if (err) { 
      return console.log(err); 
     } 
     console.log(data); 
     res.send(data) 
    }); 

}) 

app.listen(3000, function() { 
    console.log('Example app listening on port 3000!') 
}) 

客戶端,調用該服務器

$http.get('http://localhost/books').success(function(data) { 
    $scope.books = data; 
    console.log(data); 
}); 
+0

但是現在它不會渲染index.html..just顯示JSON文本 – MrRobot9

+0

您可以通過其他網絡服務器(例如nginx)或者簡單的'Web Server for Chrome'來提供HTML靜態文件。這種方法分開了服務器端和客戶端。 如果您想從客戶端讀取json文件, ('books.json')。然後(函數(響應){console.log('books.json',response); });''' – Finn

1

我注意到,當角度無法找到該文件會發生這種情況在$http.get()請求中指定。另外,從$ http.get()函數返回的.success已被棄用。相反,使用這樣的角度文檔中所述的$http.get(...)。然後方式:

https://docs.angularjs.org/api/ng/service/ $ HTTP

你也可以使用一個errorCallback作爲文檔輸出錯誤信息的聲明控制檯 - 這可能會給你更多關於正在發生的事情的信息。

此外,我不知道你爲什麼要使用文件系統來讀取./index.html文件,而不是使用本地(和免費)網絡服務器,如Apache。如果您最終託管您的網站在託管服務器上,我懷疑您將完全訪問文件系統。

https://httpd.apache.org/

最後,如果你只是學習AngularJS,你可能要開始一個示例項目看項目如何角,如下面的官方小種子項目的結構。

https://github.com/angular/angular-seed

希望有所幫助。