Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/angularjs/20.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Arrays 使用$firebaseArray代替Firebase Rest API_Arrays_Angularjs_Filter_Firebase - Fatal编程技术网

Arrays 使用$firebaseArray代替Firebase Rest API

Arrays 使用$firebaseArray代替Firebase Rest API,arrays,angularjs,filter,firebase,Arrays,Angularjs,Filter,Firebase,您好,由于Firebase缺乏对阵列存储的支持,我在从Firebase数据源筛选搜索结果时遇到问题,因此我使用firebaseArray作为替代方案。但是,由于需要通过多个控制器访问,我必须将其转换为工厂服务: servicesModule.factory("dataArray", ["$firebaseArray", function($firebaseArray) { var ref = new Firebase("https://datasource.firebaseio.co

您好,由于Firebase缺乏对阵列存储的支持,我在从Firebase数据源筛选搜索结果时遇到问题,因此我使用firebaseArray作为替代方案。但是,由于需要通过多个控制器访问,我必须将其转换为工厂服务:

servicesModule.factory("dataArray", ["$firebaseArray",
  function($firebaseArray) {
    var ref = new Firebase("https://datasource.firebaseio.com/Articles");
     return $firebaseArray(ref);
  }
]);
然后,我想创建一个搜索函数来过滤输入表单查询的结果:

//Get Posts
 servicesModule.factory('globalFilter', function() {
    return {
      searchText: ''
    };
  });
搜索输入:

<form>
          <div class="input-field">
            <input id="search" type="search" required ng-model="globalFilter.searchText">
            <label for="search"><i class="material-icons medium">search</i></label>
          </div>
    </form>
控制器的ng repeat指令中的过滤器:

我没有得到任何错误或结果。控制台为空,项目不呈现。在我使用firebaseArray之前,这是有效的。我的工厂出了什么问题?

如果您使用的是Controllera,则需要将控制器变量绑定到此工厂

您还需要在视图中将控制器称为blg。最后,我的文章应该是我的文章


你能在使用ng repeat的地方发布HTML吗?由于某种原因,帖子没有呈现它。我刚刚调整了上面的间距,您可以看到它。控制器也通过.state so:`state'Blog',{url:'/Blog',controller:'BlogCtrl as blg',templateUrl:'Blog.html',title:'Blog'}`呈现,所有评论都很好,谢谢,但仍然失败。这很奇怪,因为在我看来,{{blg.title}}是一个标题,从控制器设置this.title=my Blog title值,而不是数据源,可以很好地进行渲染。同样,如果我把它放回dataSource.queryfunctionposts{$scope.myPosts=posts;},即使用API,即使使用$scope,它也可以正常工作。这就是为什么我认为firebaseArray服务有问题。那么安全规则呢?不应该有问题,因为我有其他控制器使用firebaseArray而不是作为服务考虑示例:ControllerModule.controller'WelcomeCtrl',[$scope、$location、$CommonProp'、$firebaseAuth、$firebaseObject'、$firebaseArray',函数$scope、$location、CommonProp、$firebaseAuth、$firebaseArray、$firebaseArray{var ref=new Firebase';var myPosts=$firebasearayref;$scope.myPosts=myPosts;我不知道为什么它不起作用。在没有看到更多代码的情况下无法诊断它。在这个过程中效果很好:我需要在半夜之前更仔细地查看您的代码。但我首先注意到的是,您将视图控制器内的rch输入。是否必须输入才能工作?
   controllersModule.controller('BlogCtrl', ["$scope",  "globalFilter",    function($scope, globalFilter, dataArray) {


     $scope.myArticles = dataArray;


   }]);
<div class="col s12 m6"  id="articleItems" ng-repeat="article in myarticles">
     <div class="card small">

       <div class="card-image waves-effect waves-block waves-light">
         <img class="activator" src="images/sample-1.jpg">
       </div>
       <div class="card-content">
         <span class="card-title activator grey-text text-darken-4">{{article.Title}}<i class="material-icons right">more_vert</i></span>
         <p><a href="#">Read More</a></p>
         <p>By: {{article.Author}} &nbsp; Published on: {{article.Published | date:'mediumDate'}}</p>
       </div>
       <div class="card-reveal">
         <span class="card-title grey-text text-darken-4">{{article.Title}}<i class="material-icons right">close</i></span>
         <div>{{article.Intro}}</div>
         <p ng-bind-html="article.Body">{{article.Body}}</p>
       </div>
   </div>
</div>
  .state('Blog', {

   url: '/blog',
    controller: 'BlogCtrl as blg',
    templateUrl: 'blog.html',
    title: 'Blog'
  })`
controllersModule.controller('BlogCtrl', ["globalFilter", function(globalFilter, dataArray) {
    this.myArticles = dataArray;
}]);
<div class="col s12 m6"  id="articleItems" ng-repeat="article in blg.myArticles">