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
AngularJS需要点击2次才能执行搜索操作_Angularjs_Angular Ui Router - Fatal编程技术网

AngularJS需要点击2次才能执行搜索操作

AngularJS需要点击2次才能执行搜索操作,angularjs,angular-ui-router,Angularjs,Angular Ui Router,我是AngularJs新手:。 但我有3个组件:控制器C1用于输入搜索输入并单击提交按钮,控制器C2用于div,它将从SearchService接收结果并显示结果,服务SearchService用于发送一些硬编码结果 这个想法是,在提交搜索文本后,我必须提交两次。只需单击一次提交,ui路由器的视图将更新为部分页面,而不会加载结果。第二次单击后,将显示结果 然后在“搜索视图”页面上进行下一次搜索,一切正常,单击一次即可提供所需的数据 如何修复:我想更改ui路由器视图,只需单击一下即可从服务中获得结

我是AngularJs新手:。 但我有3个组件:控制器C1用于输入搜索输入并单击提交按钮,控制器C2用于div,它将从SearchService接收结果并显示结果,服务SearchService用于发送一些硬编码结果

这个想法是,在提交搜索文本后,我必须提交两次。只需单击一次提交,ui路由器的视图将更新为部分页面,而不会加载结果。第二次单击后,将显示结果

然后在“搜索视图”页面上进行下一次搜索,一切正常,单击一次即可提供所需的数据

如何修复:我想更改ui路由器视图,只需单击一下即可从服务中获得结果

提交searchText后开始的C1方法代码

$scope.searchText = function searchText(text) {
    $log.log("Method searchText with text: " + text);        
    //var parametersObject = {searchText: text, results: assetResults}

    $state.go('search');        
    $log.log("SearchInputBoxController: rootScope Broadcasting message: " + text);        

    $rootScope.$broadcast('DoSearch', text);                    

    $log.log("SearchInputBoxController finished");
};   
C2方法:事件“DoSearch”的事件处理程序

 $scope.$on('DoSearch', function (event, data) {        
    $scope.asset = searchService.search(data);
    $scope.searchText = data;            
 });
搜索服务代码:

Application.Services.factory('SearchService', ['SearchServiceResource', '$q',
    function (SearchServiceResource, $q) {
        return {
            search : function (searchText)
            {            
                var result = [
                    {id: 'aaaaa', sn:"1234-1234-1234-1235", name:"DCU_name1", type: "DCU", tags: ["tag1", "tag2"]},
                    {id: 'aaaaa', sn:"1234-1234-1234-1235", name:"DCU_name2", type: "DCU", tags: ["tag1", "tag2"]},
                    {id: 'aaaaa', sn:"1234-1234-1234-1235", name:"NODE_name1", type: "DCU_Node", tags: ["tag1", "tag2"]}                        
                ];
                return result;
            }
        };
}]);   

我相信点击两次是因为第一次点击触发了状态变化,然后广播发生,然后状态变化发生。第二次单击,状态不需要更改,当前未更改的控制器将获得广播。我可以想到几种不同的方法,我会避开rootscope广播:

在共享服务中,在 控制器,监视该服务的变量

更改路由/状态设置以包括/search/:searchTerm这样的参数,并在控制器中查找状态已建立的searchTerm变量,然后在控制器负载上查看是否提供了searchTerm并启动搜索


如果您需要任何帮助或更多关于所列想法的详细信息,请告诉我。

是的。你是对的。我无法将广播发送到非活动控制器。我使用set和get方法将其更改为服务。