Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/453.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
Javascript AngularJs:将搜索条件从非常大的搜索表单传递到服务-创建自定义模型?_Javascript_Angularjs - Fatal编程技术网

Javascript AngularJs:将搜索条件从非常大的搜索表单传递到服务-创建自定义模型?

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

我有一个应用程序有一个非常大的搜索表单(大约45个输入),我正在努力找出如何最好地用AngularJS编写这个。我刚刚开始使用Angular,所以这可能是显而易见的,但我有点困惑。我不知道如何传递表单中输入的值,因为我的服务是在注入工厂中

以下是我目前拥有的结构:

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)
}