, , , URL-, . 1 , , HTTP-.
, , 1 search, 1 .
+
, restrict: 'A' require: 'search', ,
-, restrict: 'A' require: 'search' ,
, controller/api . view-controller API .
:
angular.module('SearchDemo', [])
.directive('search', function(){
return {
restrict: 'E',
templateUrl: '/templates/search.tpl.html',
controller: ['$scope', function($scope){
$scope.results = [];
this.setSearchAPI = function(searchAPI){
this.api = searchAPI;
};
$scope.doSearch = function(query){
$scope.results.length = 0;
if(this.api && angular.isFunction(this.api.getResults)){
var results = this.api.getResults(query);
$scope.results.push.apply($scope.results, results);
}
};
}]
};
})
.directive('searchCompanies', function(){
return {
restrict: 'A',
require: ['search', 'searchCompanies'],
link: function(scope, elem, attr, Ctrl){
Ctrl[0].setSearchAPI(Ctrl[1]);
},
controller: ['$scope', function($scope){
this.getResults = function(query){
};
}]
};
})
.directive('searchJobs', function(){
return {
restrict: 'A',
require: ['search', 'searchJobs'],
link: function(scope, elem, attr, Ctrl){
Ctrl[0].setSearchAPI(Ctrl[1]);
},
controller: ['$scope', function($scope){
this.getResults = function(query){
};
}]
};
});
:
<search search-companies></search>
<search search-jobs></search>
, , , .
this.api .
angular.module('SearchDemo', [])
.directive('search', function(){
return {
restrict: 'E',
templateUrl: '/templates/search.tpl.html',
controller: ['$scope', function($scope){
$scope.results = [];
this.api = [];
this.addSearchAPI = function(searchAPI){
if(this.api.indexOf(searchAPI) == -1){
this.api.push(searchAPI);
}
};
$scope.doSearch = function(query){
$scope.results.length = 0;
for(var i=0; i < this.api.length; i++){
var api = this.api[i];
if(angular.isFunction(api.getResults)){
var results = api.getResults(query);
$scope.results.push.apply($scope.results, results);
}
}
};
}]
};
})
.directive('searchCompanies', function(){
return {
restrict: 'A',
require: ['search', 'searchCompanies'],
link: function(scope, elem, attr, Ctrl){
Ctrl[0].addSearchAPI(Ctrl[1]);
},
controller: ['$scope', function($scope){
this.getResults = function(query){
};
}]
};
})
.directive('searchJobs', function(){
return {
restrict: 'A',
require: ['search', 'searchJobs'],
link: function(scope, elem, attr, Ctrl){
Ctrl[0].addSearchAPI(Ctrl[1]);
},
controller: ['$scope', function($scope){
this.getResults = function(query){
};
}]
};
});
:
<search search-companies search-jobs></search>