将 JSON 文件导入运行在 Grunt 服务器上的 Angular 应用程序

Posted

技术标签:

【中文标题】将 JSON 文件导入运行在 Grunt 服务器上的 Angular 应用程序【英文标题】:Importing JSON file into Angular application running on Grunt server 【发布时间】:2013-10-17 04:40:50 【问题描述】:

我正在学习基本的 Angular 教程,需要在其中包含一个 JSON 文件。 我用 Yeoman 启动了我的应用程序,它在 grunt 上运行。

var phonecatApp = angular.module('phonecatApp', []);

phonecatApp.controller('PhoneListCtrl', function PhoneListCtrl($scope) 

  $http.get('phones/phones.json').success(function(data) 
    $scope.phones = data;
  );

);

但是,当我转到 localhost:9000 时,我收到一堆控制台错误:

ReferenceError: $http is not defined
    at new PhoneListCtrl (http://localhost:9000/scripts/controllers/main.js:17:3)
    at invoke (http://localhost:9000/bower_components/angular/angular.js:3000:28)
    at Object.instantiate (http://localhost:9000/bower_components/angular/angular.js:3012:23)
    at http://localhost:9000/bower_components/angular/angular.js:4981:24
    at http://localhost:9000/bower_components/angular/angular.js:4560:17
    at forEach (http://localhost:9000/bower_components/angular/angular.js:137:20)
    at nodeLinkFn (http://localhost:9000/bower_components/angular/angular.js:4545:11)
    at compositeLinkFn (http://localhost:9000/bower_components/angular/angular.js:4191:15)
    at compositeLinkFn (http://localhost:9000/bower_components/angular/angular.js:4194:13)
    at publicLinkFn (http://localhost:9000/bower_components/angular/angular.js:4096:30) 

任何帮助将不胜感激!

【问题讨论】:

【参考方案1】:

将 json 文件包含在工厂服务中可能会更好。这样你就可以缓存它并继续在不同的控制器上使用它。

我遇到了类似的问题,然后就这样解决了……

var App = angular.module('App', []);

// Setting up a service to house our json file so that it can be called by the controllers
App.factory('service', function($http) 
    var promise;
    var jsondata = 
        get: function() 
            if ( !promise ) 
                var promise =  $http.get('src/data_json.js').success(function(response) 
                    return response.data;
                );
                return promise;
            
        
    ;
    return jsondata;
);




App.controller('introCtrl', function (service , $scope) 
    service.get().then(function(d) 
        $scope.header = d.data.PACKAGE.ITEM[0]
    )
);

App.controller('secondCtrl', function (service , $scope) 
    service.get().then(function(d) 
        $scope.title = d.data.PACKAGE.ITEM[1]
    )
);

【讨论】:

【参考方案2】:

$http 添加为依赖项,在function PhoneListCtrl($scope, $http) 中的$scope 旁边

【讨论】:

我想我现在明白了。谢谢。

以上是关于将 JSON 文件导入运行在 Grunt 服务器上的 Angular 应用程序的主要内容,如果未能解决你的问题,请参考以下文章

将现有 JavaScript 项目导入 Grunt/Brunch 项目

在 Heroku 上运行 Grunt 构建任务

Grunt

Grunt,NPM和Bower之间的区别(package.json vs bower.json)

如何在没有 grunt 或 gulp 的情况下将 typescript 编译器作为 package.json 脚本运行

将数据从 MYSQL 导入网络服务器上的 JSON 文件