Javascript AngularJs:将搜索条件从非常大的搜索表单传递到服务-创建自定义模型?
我有一个应用程序有一个非常大的搜索表单(大约45个输入),我正在努力找出如何最好地用AngularJS编写这个。我刚刚开始使用Angular,所以这可能是显而易见的,但我有点困惑。我不知道如何传递表单中输入的值,因为我的服务是在注入工厂中 以下是我目前拥有的结构:Javascript AngularJs:将搜索条件从非常大的搜索表单传递到服务-创建自定义模型?,javascript,angularjs,Javascript,Angularjs,我有一个应用程序有一个非常大的搜索表单(大约45个输入),我正在努力找出如何最好地用AngularJS编写这个。我刚刚开始使用Angular,所以这可能是显而易见的,但我有点困惑。我不知道如何传递表单中输入的值,因为我的服务是在注入工厂中 以下是我目前拥有的结构: app.js - app module search.js - search controller datacontext.js - service factory search.html - search form view da
app.js - app module
search.js - search controller
datacontext.js - service factory
search.html - search form view
datacontext中有一个搜索函数,用于运行搜索服务调用:
function Search(searchForm) {
var deferred = $q.defer();
var requestParameters = {
UserId: 1234,
IpAddress: '127.0.0.1',
QuickSearch: true
};
var request = {
SearchParameters: searchForm,
RequestParameters: requestParameters
};
$http.post(url, request)
.success(function (data, status) {
deferred.resolve(data);
})
.error(function(data, status) {
deferred.reject(data);
});
}
为了使该函数更易于管理,我只需传入一个搜索对象,该对象包含搜索的所有属性-firstName、lastName、dob等。当我从搜索控制器调用此函数时,是否可以从表单传入$scope(即ng click='RunSearch($scope')
另一个要求是,当用户单击搜索按钮时,我需要计算传入的条件数,以防止运行没有条件的搜索。不确定如何在viewmodel中实现此功能。。。以前做过这种应用的人有什么建议可以帮我指出正确的方向吗?谢谢 我认为您使用搜索对象的路径是正确的。这样,在创建表单时,只需将每个字段绑定到搜索对象上的属性即可 至于从表单中传递作用域(例如,ng click='RunSearch($scope')),不,您不想这样做。在视图中,暗示了“$scope”。因此,您只需要传入搜索对象(ng click='RunSearch(searchObject)'),或者依赖于RunSearch位于同一控制器中,因此它只需查看作用域就可以访问搜索对象(ng click='RunSearch()',RunSearch()位于同一作用域上)。传入搜索对象可能是更好的做法 至于表单验证,我将让RunSearch函数遍历搜索对象以查找有效的搜索词。如果没有找到,则RunSearch可以在表单上设置$invalid标志,然后返回false。然后在视图中,您可能会有一条链接到该无效标志的错误消息,告诉用户他们必须输入至少一个搜索项 大概是这样的:
<form name="searchform">
<input ng-model="searchObject.firstName" type="text">
<input ng-model="searchObject.lastName" type="text">
<button ng-click="RunSearch(searchObject)">Save</button>
<span ng-show="!searchform.$invalid">You must enter at least 1 search term</span>
</form>
$scope.RunSearch = function(searchObject) {
if(!checkSearchObject(searchObject)) {
$scope.searchform.$invalid = true;
return false;
}
else performSearch(searchObject)
}