function foo() {
return $http.get('/foo');
}
function bar() {
return $http.get('/bar');
}
$q.all([
foo(),
bar()
]).then(function (results) {
// данные загружены
})
.directive('', ['', function(){
.directive('someDirective', fn);
// <some-directive></some-directive>
angular.module('app').filter('join', function () {
return function (arr, glue) {
if (!Array.isArray(arr)) {return arr;}
return arr.join(glue);
};
});
<strong>{{store.product.genres | join : ', '}}</strong>
<div>Hello, {{name}}</div>
<!-- Эквивалентно -->
<div> Hello, <span ng-bind="name"></span></div>
Скажем контроллер директивы которые делает запросы на получение массива
И вообще в целом не перекликающиеся контроллеры
Как много стоит плодить директив?
что стоит , если вообще стоит, рендерить на стороне backend ?
c REST авторизовываемся token'ом
// Все люди ходят в туалет
// но обычно делают это в одном месте
function dataProviderFactory($http, $q) {
return {
getManufactures: getManufactures,
getCategories: getCategories,
getCategoryTree: getCategoryTree
};
function getManufactures () {
var sql = 'SELECT * FROM audio.w8265_virtuemart_manufacturers_ru_ru';
return exec(sql)
.then(function (data) {
return pluck(data, 'mf_name');
}, repeatError);
}
function getCategories(pid) {
var sql = 'SELECT virtuemart_category_id, category_name FROM audio.w8265_virtuemart_categories_ru_ru join audio.w8265_virtuemart_category_categories on virtuemart_category_id = category_child_id where category_parent_id = ' + (pid || 0);
return exec(sql)
.then(function (data) {
return pluck(data, 'category_name');
}, repeatError);
}
// а еще лучше уж тогда так:
function getCategoryTree() {
// get all categories
var sql = 'SELECT virtuemart_category_id as id, category_name, category_parent_id as parent_id FROM audio.w8265_virtuemart_categories_ru_ru join audio.w8265_virtuemart_category_categories on virtuemart_category_id = category_child_id';
return exec(sql)
.then(function (categories) {
return getChildren(categories);
// простенький рекурсивный обход дерева
function getChildren(collection, pid) {
pid = pid || 0;
return collection.filter(function (item) {
return item.parent_id == pid;
}).map(function (category) {
return {
name: category.category_name,
children: getChildren(collection, category.id)
}
});
}
}, repeatError);
}
// я думаю не стоит даже говорить насколько это плохо....
// я надеюсь что никто не увидит эту систему кроме как менеджеры какие-нибудь...
// ибо это нехилая такая дыра в безопасности
// да и вообще стремно
function exec(sql) {
return $http
.get('/ajax/index.php')
.then(function (response) {
// а если вы на сервере укажите Content-type application/json
// Angular будет делать вам это автоматом
return angular.fromJson(response.data);
}, repeatError);
}
function repeatError(reason) {
return $q.reject(reason)
}
function pluck(collection, key) {
return collection.map(function (item) {
return item[key];
});
}
}
// чистенький контроллер
function SearchController (dataProvider) {
var vm = this;
dataProvider.getCategoryTree().then(function (tree) {
vm.categories = tree;
});
}
<div ng-controller="SearchController as search">
<ul>
<li ng-repeat="item in search.tree">
</div>