AngularJS将数据从控制器传递到另一个控制器
我做了什么。 我用带有特定指令的controllerA中的json检索youtube api中的视频列表。 json包含视频列表和视频本身的详细信息。
我想做的事。 点击视频时,我希望视频的详细信息以其他控制器B的另一个ng视图显示,并使用之前请求的json数据。
所以我的问题是如何将数据从控制器A传递给控制器B.
注 - $ controller服务在controllerA中使用
这是从AngularJS开始的常见疑问之一。 根据你的要求,我相信你最好的选择是创建一个服务,检索电影列表,然后在controllerA
和controllerB
使用这个服务。
module.factory('youtube', function() {
var movieListCache;
function getMovies(ignoreCache) {
if (ignoreCache || !movieListCache) {
movieListCache = $http...;
}
return movieListCache;
}
return {
get: getMovies
};
});
然后你只需在两个控制器中注入该服务。
module.controller('controllerA', ['youtube', function(youtube) {
youtube.get().then(function doSomethingAfterRetrievingTheMovies() {
});
}]);
module.controller('controllerB', ['youtube', function(youtube) {
youtube.get().then(function doAnotherThingAfterRetrievingTheMovies() {
});
}]);
如果您在B中使用它之前需要controllerA处理信息,那么您可以在服务中创建更多方法。 像这样的东西:
module.factory('youtube', function($q) {
var movieListCache,
deferred = $q.defer();
function getMovies(ignoreCache) {
if (ignoreCache || !movieListCache) {
movieListCache = $http...;
}
return movieListCache;
}
function getChangedMovies() {
return deferred.promise;
}
function setChangedMovies(movies) {
deferred.resolve(movies);
}
return {
get: getMovies,
getChanged: getChangedMovies,
setChanged: setChangedMovies
};
});
如果您不知道$q
是什么,请查看文档。 这是处理异步操作所必需的。
无论如何,还有其他一些方法可以完成这项任务:
$rootScope
恕我直言,#1是一个通用的解决方案; 只有在没有其他选择的情况下,我才会使用它。 如果你有这些控制器之间的内在通信需求,比如配置或者让他们知道对方的存在,那么#2很有用。 这里有一个例子。
你想要做的是共享有状态的单身信息; 因此,一项服务就是要走的路。
链接地址: http://www.djcxy.com/p/77821.html上一篇: AngularJS pass data from controller to another controller
下一篇: different ways to create controllers and services, why?