Я нашел элегантное решение, которое будет охватывать большинство ваших баз. Я написал об этом вначале здесь и ответил на другой аналогичный вопрос StackOverflow здесь , который ссылается на него.
FYI это решение также включает в себя жестко закодированные резервные теги в случае, если Javascript isn «Поднял гусениц. Я не указал его явно, но стоит упомянуть, что вы должны активировать режим HTML5 для правильной поддержки URL.
Также обратите внимание: это не полные файлы, а только важные части тех, которые имеют значение. Если вам нужна помощь в написании шаблона для директив, служб и т. Д., Которые можно найти в другом месте. В любом случае, здесь идет ...
app.js
Здесь вы указываете пользовательские метаданные для каждого из ваших маршрутов (название, описание и т. Д.)
$routeProvider
.when('/', {
templateUrl: 'views/homepage.html',
controller: 'HomepageCtrl',
metadata: {
title: 'The Base Page Title',
description: 'The Base Page Description' }
})
.when('/about', {
templateUrl: 'views/about.html',
controller: 'AboutCtrl',
metadata: {
title: 'The About Page Title',
description: 'The About Page Description' }
})
metadata-service.js (service)
Устанавливает параметры пользовательских метаданных или использует значения по умолчанию в качестве резервных копий.
var self = this;
// Set custom options or use provided fallback (default) options
self.loadMetadata = function(metadata) {
self.title = document.title = metadata.title || 'Fallback Title';
self.description = metadata.description || 'Fallback Description';
self.url = metadata.url || $location.absUrl();
self.image = metadata.image || 'fallbackimage.jpg';
self.ogpType = metadata.ogpType || 'website';
self.twitterCard = metadata.twitterCard || 'summary_large_image';
self.twitterSite = metadata.twitterSite || '@fallback_handle';
};
// Route change handler, sets the route's defined metadata
$rootScope.$on('$routeChangeSuccess', function (event, newRoute) {
self.loadMetadata(newRoute.metadata);
});
metaproperty.js (директива)
Упаковывает результаты службы метаданных для представления.
return {
restrict: 'A',
scope: {
metaproperty: '@'
},
link: function postLink(scope, element, attrs) {
scope.default = element.attr('content');
scope.metadata = metadataService;
// Watch for metadata changes and set content
scope.$watch('metadata', function (newVal, oldVal) {
setContent(newVal);
}, true);
// Set the content attribute with new metadataService value or back to the default
function setContent(metadata) {
var content = metadata[scope.metaproperty] || scope.default;
element.attr('content', content);
}
setContent(scope.metadata);
}
};
index.html
В комплекте с жестко закодированными тегами возврата, упомянутыми ранее, для искателей, которые не могут забрать любой Javascript.
Fallback Title
Это должно значительно помочь в большинстве случаев использования в поисковых системах. Если вы хотите полностью динамическую рендеринг для искателей социальных сетей (которые, несмотря на поддержку Javascript), вам все равно придется использовать одну из служб предварительного рендеринга, упомянутых в некоторых других ответах.
Надеюсь, что это помогает!
решил проблему с добавлением kubelet --fail-swap-on=false"
в KUBELET_ARGS=
в конфигурационном файле Kubelet. Но проблема с узлами остается прежней - статус NotReady