Javascript 如何将模板中的唯一id与控制器中的筛选函数匹配?

Javascript 如何将模板中的唯一id与控制器中的筛选函数匹配?,javascript,angularjs,angularjs-scope,Javascript,Angularjs,Angularjs Scope,这是我的app.js: .state('app.study_collections', { url: "/studies/:studynodeRef", views: { 'menuContent': { templateUrl: "templates/rubyonic/overview.html" } } }) <div class="feed-item"> <div class="feed-media"

这是我的app.js

.state('app.study_collections', {
    url: "/studies/:studynodeRef",
    views: {
      'menuContent': {
        templateUrl: "templates/rubyonic/overview.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>
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.html中的一个片段:

.state('app.study_collections', {
    url: "/studies/:studynodeRef",
    views: {
      'menuContent': {
        templateUrl: "templates/rubyonic/overview.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>
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()
调用Studies服务,该服务对json文件进行异步调用以获取数据

Studies.all().then(function(payload){
  $scope.studies = payload;
});
这将获取在studies.html文件中迭代的所有研究的列表。每项研究都有其独特的节点。当你点击一项研究时,它会映射到url
“#/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}}
),什么也不显示,当我执行
控制台.log()
时,它是未定义的

我该如何解决这个问题?如果需要澄清,请告诉我

编辑

我对控制器做了一些更改。我现在可以从url访问nodeRef,但由于某些原因,它在我的筛选功能中无法工作,除非我手动输入它。看看这里

这就是my 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;
    }
};
})

问题似乎是您正在将“nodeId”与“nodeId”进行比较

原创的

$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]; 
请看这个例子


这并没有什么帮助。我认为我的问题与异步调用有关。如果我没有抓住要点,如果你能演示如何实施itI,我会非常感激。我对你的问题还不太清楚。你用过滤器干什么?为什么要调用
Studies.all()
两次?一次获取所有研究。第二次通过noderefi过滤特定研究改进了代码,请在此处查看:$scope.study不会返回任何内容,除非我手动输入nodereft感谢您的回复!您确定它返回布尔值吗?因为当我给d.nodeRef==“一些id值”时,它起作用了。由于某些原因,$scope.id无法使用它。顺便说一句,我又试了一遍:`Studies.all()。然后(函数(有效载荷){$scope.Studies=payload;$scope.study=$filter('filter')(有效载荷,函数(d){$scope.id=''+$rootScope.nodeId+'”;如果(d.nodeRef====$scope.id)返回d;})[0];};`我可以在我的模板上访问{{id},但是仍然没有得到任何关于{{study}的信息。好吧,我相信问题在于比较。请尝试类似$scope.id=”“+$rootScope.nodeId;我已经更新了JSFIDLE