我正在尝试在AngularJS中创建搜索功能。这是我的控制器代码:
app.controller('SearchController',['$scope', '$window','SearchService', '$cookies' ,'$location','$routeParams',
function($scope,$window, SearchService, $cookies, $location, $routeParams) {
$scope.homePageSearch = function(search) {
$scope.result = '';
$scope.count = '';
SearchService.setSearchData(search);
$window.location.href = '/search/';
}
$scope.jobDetail = function(){
var slug = $location.absUrl().split('/')[4];
SearchService.getJobDetail(slug).then(function(data){
console.log(data)
});
}
var url = $location.absUrl().split('/')[3];
if(url == 'jobdetail'){
$scope.jobDetail();
}
});
}]);
我在页面加载时调用homePageSearch
函数。在此之后,我将页面重定向到/ jobDetail /并调用函数jobDetail.But问题是homePageSearch()函数也在jobDetail页面上调用如何避免在jobDetail页面上调用homePageSearch()函数。
我应该为/ jobDetail / page使用不同的控制器吗?
我是angularJs的新手请建议我实现这一目标的正确方法。
答案 0 :(得分:3)
我没有足够的声誉,因为我是新的堆栈溢出,所以我现在正在发布一个答案。
从您的评论中可以看出,您有两个不同的页面。所以,你肯定应该有两个不同的控制器。您可以使用路由器轻松指定。我更喜欢使用ui-router而不是ng-router。
创建router.js
文件,如下所示。您可以为每个页面指定控制器,如下所示:
$stateProvider
.state('login', {
url: '/',
templateUrl: '/views/search.html',
controller: 'SearchController'
})
.state('results', {
url: '/results',
templateUrl: '/views/result.html',
controller: 'ResultController'
});
然后,您已经了解了如何使用控制器。更重要的是,请避免使用$window.location.href
,因为它会刷新您的网页,这意味着它会重新启动您的应用。
事实上,您应该使用$state.go()
(如果您使用的是ui-router)或$location.path()
(如果您使用的是ng-router)
答案 1 :(得分:2)
根据您的评论,您似乎有两个功能:
因为它是两个不同页面上的两个不同的东西,我建议你使用两个控制器:每个控制器一个。
始终尝试让控制器变得简单:他们需要知道如何执行特定的任务。
中的相关部分通常,控制器不应该尝试做太多。这应该 仅包含单个视图所需的业务逻辑。
保持控制器苗条的最常用方法是封装工作 不属于控制器的服务然后使用这些 控制器中的服务通过依赖注入。这将在讨论中 本指南的依赖注入和服务部分。
此外,我建议你阅读Divide and conquer,这是一个关于前端架构的有趣指南。