我成功创建了一个获取.php文件输出( JSON)的工厂, 我的问题是如何从控制器访问它: myApp = angular.module("myApp", [])myApp.factory "mainData", ($http) - $http.get('gethome.php').success (data) - data: data consol
我的问题是如何从控制器访问它:
myApp = angular.module("myApp", []) myApp.factory "mainData", ($http) -> $http.get('gethome.php').success (data) -> data: data console.log(data) myApp.controller "HomeCtrl", ($scope, mainData) -> $scope.home = mainData.data
如果我在这里选择正确的语法,请告诉我,
我在教程中看到了很多关于如何在任何地方创建模块/控制器的示例,
我正在寻找正确的方法
myApp.factory("mainData", function($http) { var mData = {}; $http.get('gethome.php').success(function(data) { mData.data = data; }); return mData; }); myApp.controller("HomeCtrl", function($scope, mainData) { $scope.home = mainData.data; // Here mainData equals mData object literal from the mainData factory });
但是,您的代码的问题是mainData.data将始终未定义,因为factory将在async $http请求完成之前返回.所以相反,你的工厂应该回复一个承诺:
myApp.factory("mainData", function($http) { return $http.get('gethome.php'); }); myApp.controller("HomeCtrl", function($scope, mainData) { mainData.success(function(data) { $scope.home = data; }); });
注意:默认情况下,$http方法始终返回一个promise.