【发布时间】:2017-02-06 07:49:53
【问题描述】:
背景
我正在制作一个关于侏儒的人口普查应用程序。此应用程序显示所有 gnome 的列表并允许您对其进行过滤。
问题
问题是过滤器不起作用!我的gnome-filter 控制器无法与gnome-list 控制器通信。为了解决这个问题,我尝试通过在 StackOverlflow 中阅读此答案来创建服务:
但是,在创建了我认为是答案的精美复制品之后,它仍然无法正常工作。
代码
当应用程序首次加载时,gnome-list 向 gnome 人口普查服务器发出请求以获取所有 gnome 并显示它们。
但是,有很多侏儒,所以我为您提供了过滤它们的选项,并且只使用 gnome-filter 过滤掉那些有阅读头发的人。
不幸的是,即使我向服务器发出请求并得到答复,我的服务也无法正常工作...
/*global angular*/
(function() {
var app = angular.module("census", []);
app.controller("gnomeFilter", function(DataShareServ) {
var self = this;
self.listServ = DataShareServ;
self.makeRequest = function() {
self.listServ.request({
hairColor: "red"
});
};
});
app.controller("gnomeList", function(DataShareServ) {
var self = this;
self.listServ = DataShareServ;
self.listServ.request();
self.list = self.listServ.data;
});
// Create the factory that share the Fact
app.factory('DataShareServ', function($http) {
var self = this;
self.list = {};
self.list.data = [];
self.list.request = function(params) {
var theUrl = 'https://gnome-shop-fl4m3ph03n1x.c9users.io/api/v1/gnomes';
if (params.hairColor)
theUrl = theUrl + "?hairColor=" + params.hairColor;
$http({
method: 'GET',
url: theUrl,
headers: {
'Content-Type': 'application/json; charset=utf-8'
}
}).then(function successCallback(response) {
self.list.data = response.data.entries;
console.log("submitted");
}, function errorCallback(response) {
console.log('Error: ' + response);
});
};
return self.list;
});
})();
<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.6.1/angular.min.js"></script>
<body>
<!-- Search functionality -->
<form ng-controller="gnomeFilter as filterCtrl" ng-submit="filterCtrl.makeRequest()">
<button type="submit">Get Reddies !!</button>
</form>
<!-- Gnomes list -->
<div ng-controller="gnomeList as listCtrl">
<ul>
<li ng-repeat="gnome in listCtrl.list">
{{gnome.name}}
</li>
</ul>
</div>
</body>
问题
- 我的代码有什么问题?我该如何解决?
【问题讨论】:
-
我猜你可以通过使用 rootScope 在两个控制器之间轻松共享数据。
-
我致力于服务,根据社区的说法,这似乎是更好的选择。
-
@Majid 这是一个糟糕的建议,不符合普遍接受的最佳做法
标签: javascript angularjs service controllers