Вот несколько улучшенная версия структурной директивы Ильяса Ламрани, которая позволяет вам использовать индекс в вашем шаблоне:
@Directive({
selector: '[appRepeatOf]'
})
export class RepeatDirective {
constructor(private templateRef: TemplateRef<any>,
private viewContainer: ViewContainerRef) {
}
@Input()
set appRepeatOf(times: number) {
const initialLength = this.viewContainer.length;
const diff = times - initialLength;
if (diff > 0) {
for (let i = initialLength; i < initialLength + diff; i++) {
this.viewContainer.createEmbeddedView(this.templateRef, {
$implicit: i
});
}
} else {
for (let i = initialLength - 1; i >= initialLength + diff ; i--) {
this.viewContainer.remove(i);
}
}
}
Использование:
<li *appRepeat="let i of myNumberProperty">
Index: {{i}}
</li>
без каких-либо грязных раздумчивых действий, а даже грязнее!
В моем конфиге / deploy.rb:
set :deploy_subdir, "project/subdir"
Тогда я добавил эту новую стратегию на мой Capfile:
require 'capistrano/recipes/deploy/strategy/remote_cache'
class RemoteCacheSubdir < Capistrano::Deploy::Strategy::RemoteCache
private
def repository_cache_subdir
if configuration[:deploy_subdir] then
File.join(repository_cache, configuration[:deploy_subdir])
else
repository_cache
end
end
def copy_repository_cache
logger.trace "copying the cached version to #{configuration[:release_path]}"
if copy_exclude.empty?
run "cp -RPp #{repository_cache_subdir} #{configuration[:release_path]} && #{mark}"
else
exclusions = copy_exclude.map { |e| "--exclude=\"#{e}\"" }.join(' ')
run "rsync -lrpt #{exclusions} #{repository_cache_subdir}/* #{configuration[:release_path]} && #{mark}"
end
end
end
set :strategy, RemoteCacheSubdir.new(self)
Вы можете иметь два репозитория мерзавца (клиент и сервер) и добавить их к "суперпроекту" (приложение). В этом "суперпроекте" можно добавить эти два репозитория как подмодули (проверка это учебное руководство ).
Другое (немного более грязное) возможное решение состоит в том, чтобы иметь отдельные ответвления для клиента и сервера, и затем можно вытянуть от ответвления 'сервера'.
К сожалению, мерзавец не обеспечивает способа сделать это. Вместо этого 'мерзавец путь' состоит в том, чтобы иметь два репозитория - клиент и сервер и клонировать один (s), Вам нужно.
Решение есть. Скачайте патч crdlo для capistrano и capistrano source с github. Удалите существующий гем capistrano, примените патч, установите setup.rb, а затем вы можете использовать его очень простую строку конфигурации set: project, "mysubdirectory"
для установки подкаталога.
Единственная проблема - что очевидно github не "поддерживает команду архивирования" ... по крайней мере, когда он ее написал. Я использую свой собственный репозиторий git поверх svn, и он работает нормально, я не пробовал его с github, но думаю, если достаточно людей будет жаловаться, они добавят эту функцию.
Также посмотрите, сможете ли вы заставить авторов capistrano добавьте эту функцию в шапку при соответствующей ошибке .
Looks like it's also not working with codebasehq.com so I ended up making capistrano tasks that cleans the mess :-) Maybe there's actually a less hacky way of doing this by overriding some capistrano tasks...