【发布时间】:2015-05-30 12:43:06
【问题描述】:
我正在通过本教程学习 AngularJS http://curran.github.io/screencasts/introToAngular/exampleViewer/#/42
youtube 上还有一段视频,带你了解整个过程
当您打开链接时(示例 42),您会看到我卡在哪里了。
我希望你能简单地解释一下这些行发生了什么
countryApp.factory('countries', function($http){
var cachedData;
function getData(callback){ // *1
if(cachedData) {
callback(cachedData); // *1
} else {
$http.get('countries.json').success(function(data){
cachedData = data;
callback(data); // *1
});
}
}
return {
list: getData, // *2
find: function(name, callback){ // *3
getData(function(data) {
var country = data.filter(function(entry){
return entry.name === name;
})[0];
callback(country); // *1
});
}
};
});
countryApp.controller('CountryListCtrl', function ($scope, countries){
countries.list(function(countries) { // *2
$scope.countries = countries;
});
});
countryApp.controller('CountryDetailCtrl', function ($scope, $routeParams, countries){
countries.find($routeParams.countryName, function(country) { // *3
$scope.country = country;
});
});
*1 - 什么是“回调”函数,它到底是做什么的?它是一些内置功能吗?如果不是,为什么没有函数的定义。
*2 - 在 youtube 视频中,这家伙说 "list" 是一个函数,为什么用 ":" 声明它? CountryListCtrl(控制器)中的“列表”是否与国家/地区(工厂)中return{}中的“列表”功能相同
*3 - 与“*2”相同,但功能不同 -> find
【问题讨论】:
-
您和本教程的作者应该了解 Promise。这是一篇博客文章,应该解释为什么上面的代码是反模式。 blog.ninja-squad.com/2015/05/28/angularjs-promises