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