js файл:
'use strict';
angular.module('myApp')
.factory('Order', ['$resource',
function ($resource) {
return $resource('/api/orders/:id', { id: 'all' } );
}
])
.controller('orderCtrl', ['$scope', '$routeParams', 'Order',
function ($scope, $routeParams, Order) {
// Если здесь не заполнить скоп то в обработке директивы будет ошибка
$scope.orders = [{
name: 'name'
}];
console.log('controller');
Order.query({id: 'all'}, function(orders) {
$scope.orders = orders;
console.log('get data from server');
});
}
])
.directive('orderDrct', ['$compile',
function ($compile) {
return {
restrict: 'A',
link: function (scope, element) {
var html = '';
angular.forEach(scope.orders, function (ord) {
html += '<h4>' + ord.name + '</h4>';
});
element.append($compile(html)(scope));
console.log('end of directive');
}
};
}
]);
в консоли сообщения в таком порядке:
controller
end of directive
get data from server
и часть моего html (у меня все в jade, надеюсь понятно будет):
div.marketing
h3 It made with ng-repeat
div.order(ng-repeat='order in orders')
h4 {{order.name}}
div.marketing
h3 It made with derective
div(order-drct)
1-й блок построен с использованием ng-repeat и он перестраивается после прихода данных
2-й собственно то что мне нужно, но я хочу чтоб он построился когда с сервера придут данные.
UPDATE 29.05.14! (вытащил сюда из комментария)
Я не хочу повторить ng-repeat, у меня совсем другая задача.
В моей форме, набор полей строится по данным пришедшим с сервера (максимально упростил, чтоб понять задачу):
jsbin.com/tafuw/3/watchСобственно у меня все работает, проблем нету, но мнения о правильности или не правильности такого решения мне интересны.
UPDATE 31.05.14!
Вообще то, что мне нужно, можно реализовать вообще без своей директивы, используя ng-switch.
Конечно это уже не совсем по теме вопроса, но все же оставлю здесь, может кому понадобится.
jsbin.com/repidexo/2/watch