这是我的 app.js :
.state('app.study_collections', {
url: "/studies/:studynodeRef",
views: {
'menuContent': {
templateUrl: "templates/rubyonic/overview.html"
}
}
})
以下是我的 studies.html :
的摘录<div class="feed-item">
<div class="feed-media" ng-repeat="study in studies">
<img src="{{study.image}}" class="feed-image">
<div class="feed-gradient-overlay"></div>
<a href="#/app/studies/{{study.nodeRef}}">
<h4 class="feed-title">{{study.title}}</h4>
</a>
</div>
</div>
以下是我的 controller.js :
的摘录Studies.all().then(function(payload){
$scope.studies = payload;
});
Studies.all().then(function(studies){
$scope.study = $filter('filter')(studies, function (d) {return d.nodeRef === '"'+ $stateParams.studynodeRef + '"';})[0];
});
因此Studies.all()
调用了研究服务,该服务对json文件进行异步调用以获取数据。
Studies.all().then(function(payload){
$scope.studies = payload;
});
这将获得在students.html文件中迭代的所有研究的列表。每项研究都有其独特的nodeRef。当您点击某项研究时,它会映射到网址"#/app/studies/{{study.nodeRef}}"
。之后,我想使用nodeRef从研究集合中筛选出一个应该由
Studies.all().then(function(studies){
$scope.study = $filter('filter')(studies, function (d) {return d.nodeRef === '"'+ $stateParams.studynodeRef + '"';})[0];
});
其中d.nodeRef === '"'+ $stateParams.studynodeRef + '"'
将其与正确的nodeRef匹配并筛选出该研究。但是,当我尝试在{{study}}
这样的模板中打印研究时,没有任何内容出现,当我执行console.log()
时,它未定义。
我该如何解决这个问题?如果需要任何澄清,请告诉我。
修改
我对我的控制器进行了一些更改。我现在能够从url访问nodeRef,但由于某些原因它在我的过滤器函数中不起作用,除非我手动输入它。在这里查看https://gist.github.com/shubhamsinha92/01b492c62c4dd5ad3a7c
这就是我的services.js的样子:
var app = angular.module('starter.services', [])
.factory('Studies',function($http,$filter,$q){
var deferred = $q.defer();
var studies = [];
$http.get("studies.json").success(
function(data){
//studies = data;
angular.copy(data, studies);
//At this point you can filter data as required, or not at all. I would suggest returning the entire JSON response and not filtering here at all, let the controllers filter the data as needed to maintain a layer of separation between controller and service.
deferred.resolve(studies);
}
);
return {
all: function(){
return deferred.promise;
}
};
})
答案 0 :(得分:0)
似乎您正在比较&#34;&#34; nodeId&#34;&#39; to&#39; nodeId&#39;。
原始
$filter('filter')(payload, function (d) {
$scope.id = '"' + $rootScope.nodeId + '"';
return d.nodeRef === $scope.id ;})[0];
解决方案
$filter('filter')(payload, function (d) {
$scope.id = "" + $rootScope.nodeId;
if (d.nodeRef === $scope.id)
return d;})[0];
请参阅此示例