2014-02-09 70 views
1

首先,讓我告訴你我是JavaScript和node.js世界的新手。我一直在尋求幫助,試圖做我想做的事,但還沒有找到。在MEAN棧中創建搜索文章功能

我正在使用MEAN堆棧(http://mean.io/),我試圖在包含的文章模型中實現搜索功能。搜索將查找具有特定標籤的文章,並將在索引頁中實施。跟我來,看看你是否能找到我失蹤的請。

在後端:

應用程序/模型/

/** 
* Article Schema 
*/ 
var ArticleSchema = new Schema({ 
    created: { 
     type: Date, 
     default: Date.now 
    }, 
    title: { 
     type: String, 
     default: '', 
     trim: true 
    }, 
    content: { 
     type: String, 
     default: '', 
     trim: true 
    }, 
    tag: { 
     type: String, 
     default: '', 
     trim: true 
    }, 
    user: { 
     type: Schema.ObjectId, 
     ref: 'User' 
    } 
}); 

應用程序/控制器/

exports.searcharticle = function(req, res) { 
    Article.find({'tag': req.params.tag}).sort('-created').populate('user', 'name username').exec(function(err, articles) { 
     if (err) { 
      res.render('error', { 
       status: 500 
      }); 
     } else { 
      res.jsonp(articles); 
     } 
    }); 
}; 

增加了對應用程序/路由/ articles.js搜索路線

app.get('/articles/search/:tag', articles.searcharticle); 

在前端:

創建的搜索至極將顯示搜索結果的看法 - 大衆/視圖/條/ search.html

<section data-ng-controller="ArticlesController" data-ng-init="searchart()"> 
<ul class="articles unstyled"> 
<li data-ng-repeat="article in articles"> 
<span>{{article.created | date:'medium'}}</span>/
<span>{{article.user.name}}</span> 
<h2><a data-ng-href="#!/articles/{{article._id}}">{{article.name}}</a></h2> 
<div>{{article.tag}}</div> 
</li> 
</ul> 
<h1 data-ng-hide="!articles || articles.length">Your search hasn't returned any results. <br> Why don't you <a href="/#!/articles/create">Create One</a>?</h1> 
</section> 

的index.html的,其中的觀點搜索框將實施

<section data-ng-controller="ArticlesController"> 
     <form role="form" data-ng-submit="searchart()"> 
     <div> 
      <div> 
      <input type="text" id="tag" ng-model="selected" class="form-control" placeholder="Tag"> 
      </div> 
      <div> 
      <button type="submit" class="btn btn-default">Submit</button> 
      </div> 
     </div> 
     </form> 

添加到config.js路線

when('/articles/search/:tag', { 
      templateUrl: 'views/articles/search.html' 
     }). 

,並添加了搜索功能的文章控制器

$scope.searchart = function() { 
    Articles.query(function(articles) { 
     $scope.articles = articles; 
    }); 
}; 

眼下,隨着此代碼實現的,當我在索引頁面提交按鈕的點擊,沒有任何反應。

你能找到我缺少的東西嗎?

提前致謝!

回答

0

爲了在客戶端文章服務中使用URL,您應該在文章服務中定義URL參數:packages/articles/public/services/article.js,就像這裏已經定義的articleId參數一樣:

angular.module('mean.articles').factory('Articles', ['$resource', 
    function($resource) { 
    return $resource('articles/:articleId', { 
     articleId: '@_id' 
    }, { 
     update: { 
     method: 'PUT' 
     } 
    }); 
    } 
]); 

然後,你需要將它傳遞到自己的角度控制器搜索方法,這樣得到一個由ID,像這樣的功能:

$scope.findOne = function() { 
     Articles.get({ 
     articleId: $stateParams.articleId 
     }, function(article) { 
     $scope.article = article; 
     }); 
    }; 

個人而言,我不知道如何添加其他除了exi以外,還有$ resource對象的參數sting one(articleId),您可能需要使用新參數(:tag)創建另一個$ resource服務,並將其用於角度控制器中的搜索方法。

聽起來更加簡單,靈活,我是剛剛通過的搜索參數的查詢方法,這樣的另一種方式

$scope.searchart = function() { 
    Articles.query({tag:$scope.selectedTag}, function(articles) { 
     $scope.articles = articles; 
    }); 
}; 

,然後在服務器端控制,看了你的查詢參數像這樣:

exports.searcharticle = function(req, res) { 
    Article.find(req.query).sort('-created').populate('user', 'name username').exec(function(err, articles) { 
     if (err) { 
      res.render('error', { 
       status: 500 
      }); 
     } else { 
      res.jsonp(articles); 
     } 
    }); 
};