Los web components son un estándar del W3C que nos permiten desglosar el desarrollo de aplicaciones web en pequeños contenedores que encapsulan marcado, código JavasScript y estilos CSS, recibiendo el nombre de componentes.
Esto nos permite reutilizarlos en diferentes partes de nuestras aplicaciones y también para exponer nuestros servicios en otras aplicaciones con simplemente un tag HTML.
Origen de los web components
Los web components surgieron como propuesta por parte de Google a la W3C, prácticamente a la par que el framework MVC de JavaScript AngularJS, también creado por la compañía del buscador. En este framework se presentaba el concepto de “directiva”, en el que podíamos crear etiquetas HTML propias para encapsular un marcado HTML con su propio ámbito de ejecución.
AngularJS nos proporciona controladores, enrutado, filtros, servicios, etc, y las directivas estaban ahí, aunque en un principio no eran tan utilizadas. Con el tiempo empezaron a extenderse debido a terceros desarrolladores que compartían, a modo de proyectos Open Source, sus implementaciones. De esta manera, en nuestras aplicaciones podíamos importar estos proyectos y utilizarlos en nuestros desarrollos.
Paralelamente, la W3C trabajaba en el concepto de los web components que bebían mucho de este concepto iniciado en AngularJS.
Elementos de un web component
Para crear un web component necesitamos de varios elementos:
– Templates
– Custom Elements
– Shadow DOM
– HTMLImports
1. Templates
Los Templates son un elemento de HTML5 que nos permiten crear plantillas para presentar los datos, y son nativos del navegador. En nuestro HTML tendríamos algo como lo siguiente:
<template id=”profileTemplate”>
<div class=”profile”>
<img src=”” class=”profile__img”>
<div class=”profile__name”></div>
<div class=”profile__social”></div>
</div>
</template>
Esto representaría el marcado para un perfil de usuario en una aplicación web. Nada del código englobado dentro de <template> será visible en el navegador hasta que sea activado, aunque esté dentro del código.
Para poder activarlo e inyectarle datos, debemos hacerlo a través de JavaScript con un código similar al siguiente:
var template = document.querySelector(‘#profileTemplate’);
template.querySelector(‘.profile__name’).textContent = Mi Nombre’;
template.querySelector(‘.profile__social’).textContent = ‘Sígueme en Twitter’;
document.body.appendChild(template);
2. Custom Elements
Los Custom Elements o elementos personalizados nos permiten definir nuestro propio elemento HTML (similar a las directivas de AngularJS).
Según el estándar, la forma correcta de crear un Custom Element es con la función Object.create de JavaScript y el elemento HTMLElement.protoype. Basándonos en el elemento anterior, el código sería como el siguiente:
<template id=”profileTemplate”>
<div class=”profile”>
<img src=”” class=”profile__img”>
<div class=”profile__name”></div>
<div class=”profile__social”></div>
</div>
</template>
<script>
var MyElementProto = Object.create(HTMLElement.prototype);
De esta manera ya podríamos utilizar el elemento <user-profile> en nuestra aplicación.
3. Shadow DOM
El Shadow DOM es el DOM que encapsula nuestro componente. No pertenece al DOM original del documento o página web, si no que se encuentra dentro del componente que hemos creado. Tiene su propio ámbito de ejecución y su propio estilo CSS. Piensa en ello como un DOM anidado al DOM primario de la página.
Una manera de ver el shadow DOM es en el inspector web del navegador Chrome, clicando en nuestro elemento recién creado, y así podremos ver el DOM que encapsula el componente:
▾<user-profile>
▾#shadow-root (user-agent)
<div class=”profile”>
<img src=”” class=”profile__img”>
<div class=”profile__name”></div>
<div class=”profile__social”></div>
</div>
</user-profile>
Esto es así porque en el código fuente únicamente veríamos <user-profile></user-profile>
4. HTML Imports
Al igual que en CSS podemos importar archivos externos con @import y en JavaScript usando ‘require’ (utilizando Node.js o Browserify) o ‘import’ {module} from ‘libreria.js’, con HTML Imports podemos importar ficheros HTML que contengan los web components.
Suponiendo que nuestro <user-profile> lo tenemos en un fichero llamado ‘user-profile.html’ la forma de importarlo en nuestra aplicación sería la siguiente:
<link rel=”import” href=”user-profile.html”>
Compatibilidad en los diferentes navegadores
Como todo estándar web, cada navegador se toma su tiempo en implementarlo y que esté 100% utilizable. Uno de los mejores sitios para comprobar si cierto elemento, propiedad CSS o API JavaScript, está disponible en los navegadores es la web caniuse.com
En ella vemos que en el momento de escribir este artículo Chrome y Opera ya soportan todos los requisitos para implementar y utilizar web components. Firefox prácticamente ya lo soporta a falta de dejar estable los HTML Imports. Safari aún no lo soporta de forma nativa y Microsoft en su versión Edge v13 únicamente soporta los <templates> por el momento.
Pero a través de Polyfills podemos utilizar el estándar en prácticamente cualquier navegador y combinándolos con la librería Polymer (también desarrollada por Google) nos permite crear web components de una forma sencilla, compartirlos y utilizarlos en los navegadores.
Utilizando un WebComponent de Polymer
Lo primero que debemos hacer es importar la librería webcomponents.js, que es un Polyfill desarrollado por el mismo equipo de Polymer para que los web components sean compatibles en navegadores que aún no lo soportan nativamente.
Seguidamente se importa el componente que queramos emplear, por ejemplo el componente de Google Maps.
Y por último, dentro del BODY, ya podemos usar ese componente. El código sería algo similar a esto:
Lo que nos mostraría en el navegador, un mapa como el siguiente:
Creando un web component con Polymer
Para crear un componente web con Polymer, debemos seguir la guía de estilo y buenas prácticas que promueven desde el equipo de Google. Lo primero que necesitamos es crear un archivo HTML con el nombre del componente que queremos desarrollar.
Dentro de ese archivo importamos Polymer para poder utilizar la etiqueta <dom-module> . El id de dom-module y el ‘is’ de la función Polymer deben tener el mismo nombre que el nombre del webcomponent.
Dentro de <dom-module> insertamos la etiqueta <template> para el marcado HTML, el <script> para el código JavaScript y <style> para el CSS del componente.
En el pasado año vimos como el desarrollo de aplicaciones web se estaba “componetizando”. Con el impulso de React y Polymer, esta nueva forma de desarrollar se está popularizando.
Ahora se piensa en pequeños componentes con su lógica propia y que poco a poco van formando la estructura de una aplicación, en lugar de un código completo Modelo-Vista-Controlador.
Esta nueva metodología de desarrollo la ha popularizado React, la librería creada por Facebook. React, al contrario que Polymer, no crea por defecto componentes web exportables, si no que componetiza la propia aplicación. Esta es la principal diferencia cuando hablamos de components y web components.
Un component es un pedazo en nuestra aplicación, como puede ser un menú, un header, un navbar, un item,etc. Descomponemos la lógica de nuestra aplicación en estos pequeños contenedores sin que sean exportables para otra aplicación.
En cambio un web componentse entiende que exporta un API o un servicio de terceros, como puede ser <google-map> o <youtube-video>, o una pasarela de pago como puede ser PayPal o Stripe por medio de unas etiquetas HTML.
Angular por su parte está tendiendo a esta forma de programar. Su nueva versión 2.0 sigue esta metodología de creación de componentes, y en sus versiones 1.x (en concreto la 1.4, la 1.5 que está en fase beta y la futura 1.6) tienden hacia eso.
Desde el equipo de Ingeniería de PayPal se está desarrollando/orientando a directivas, para encapsular dentro de ellas el templating y los controladores. Después en el routing, en lugar de indicar un templateUrl con un HTML y un controlador, se indica la directiva que se quiera cargar para una determinada URL.
Esto casa con que la función directive de Angular será sustituida por el método component en Angular 1.5, cumpliendo el mismo propósito pero ya indicándonos que una directiva no tiene porque ser un contenido HTML muy extenso, puede limitarse a un componente más reducido.
También cuadra con el nuevo sistema de rutas de Angular 2, que ya se puede utilizar en Angular 1.x con ngNewRouter, el cual está orientado a componentes.
Conclusión
Todo parece indicar que el desarrollo web frontend, presente y futuro será basado en componentes. De esta forma dividimos nuestros problemas en trozos más pequeños, con su propio estilo y funcionalidad y los vamos componiendo hasta formar aplicaciones más grandes.
Es la misma lógica que se lleva a cabo en el backend, donde se está pasando de sistemas monolíticos que controlaban toda la lógica de la aplicación, a microservicios con pequeñas tareas asignadas.
Sin duda, estamos en un momento de cambio constante en la web, donde tenemos que estar informados y actualizados para poder sacar ventaja en nuestros desarrollos profesionales.
Carlos Azaustre es ingeniero en Telemática especializado en desarrollo web fullstack con JavaScript. Trabaja con AngularJS y NodeJS. Actualmente es CTO y CoFundador de Chefly, una startup de economía colaborativa que te ayuda a comer comida casera de calidad.
Una API es el mecanismo más útil para conectar dos softwares entre sí para el intercambio de mensajes o datos en formato estándar como XML o JSON. Así es como se convierte en un instrumento para buscar ingresos, abrirse al talento, innovar y automatizar procesos.
Las APIs pueden ser un gran apoyo a la hora de automatizar procesos empresariales Las empresas, a menudo con foco en las PYMES, dedican demasiadas horas-persona a procesos empresariales que consumen un tiempo precioso, incurriendo con ello en errores que una máquina jamás tendría. ¿Cómo puede la automatización de procesos empresariales (BPA) ayudar a estas […]
Se espera que durante los próximos años se regule el ‘open finance’, lo que dará lugar a un nuevo ecosistema de datos abiertos El open finance está abriéndose paso en el terreno legal mediante la consolidación de varias iniciativas que le darán blindaje jurídico. Una vez esto se haya completado, los clientes confiarán en un […]
Por favor, si no lo encuentras, recuerda revisar la sección de correo no deseado
×
El correo electrónico con tu ebook está en camino
Te hemos enviado dos mensajes. Uno con el ebook solicitado y otro para confirmar tu correo electrónico y empezar a recibir la newsletter de BBVA API_Market
×
TRATAMIENTO DE DATOS PERSONALES
¿Quién es el Responsable del tratamiento de tus datos personales?
Banco Bilbao Vizcaya Argentaria, S.A. (“BBVA”), con domicilio social en Plaza de San Nicolás 4, 48005, Bilbao, España, C.I.F. A-48265169 Dirección de correo electrónico: contact.bbvaapimarket@bbva.com
¿Para qué y por qué utilizamos tus datos personales?
Para aquellas de las siguientes actividades para la que nos prestes tu consentimiento marcando la casilla correspondiente:
para la ejecución y gestión de tu solicitud, en concreto, recibir la newsletter de BBVA API_Market por medios electrónicos;
para enviarte comunicaciones comerciales, eventos y encuestas relativas a BBVA API_Market a la dirección de correo electrónico que nos hayas facilitado.
¿Durante cuánto tiempo conservaremos tus datos?
Conservaremos tus datos hasta que te des de baja para dejar de recibir nuestra newsletter o, en su caso, las comunicaciones comerciales, eventos y encuestas a las que te hayas suscrito. Tanto si te das de baja como si BBVA decide finalizar el servicio, tus datos serán eliminados.
¿Cómo puedo darme de baja para dejar de recibir la newsletter y/o comunicaciones de BBVA API_Market?
Puedes darte de baja en cualquier momento y sin necesidad de indicarnos ninguna justificación, remitiendo un correo electrónico a la siguiente dirección: contact.bbvaapimarket@bbva.com
¿A quién comunicaremos tus datos?
No cederemos tus datos personales a terceros, salvo que estemos obligados por una ley o que tú lo consientas previamente.
¿Cuáles son tus derechos cuando nos facilitas tus datos?
Consultar los datos personales que se incluyan en los ficheros de BBVA (derecho de acceso)
Solicitar la modificación de tus datos personales (derecho de rectificación)
Solicitar que no se traten tus datos personales (derecho de oposición)
Solicitar la supresión de tus datos personales (derecho de supresión)
Limitar el tratamiento de tus datos personales en los supuestos permitidos (limitación del tratamiento)
Recibir así como a transmitir a otra entidad, en formato electrónico, los datos personales que nos hayas facilitado y aquellos que se han obtenido de tu relación con BBVA (derecho de portabilidad)
Te responsabilizas de la veracidad de los datos personales que facilitas a BBVA y de mantenerlos debidamente actualizados.
Si consideras que no hemos tratado tus datos personales de acuerdo con la normativa, puedes contactar con el Delegado de Protección de Datos en la dirección dpogrupobbva@bbva.com
Puedes encontrar más información en el documento “Política de Protección de Datos Personales” de esta página web.
×
TRATAMIENTO DE DATOS PERSONALES
¿Quién es el Responsable del tratamiento de tus datos personales?
Banco Bilbao Vizcaya Argentaria, S.A. (“BBVA”), con domicilio social en Plaza de San Nicolás 4, 48005, Bilbao, España, C.I.F. A-48265169 Dirección de correo electrónico:contact.bbvaapimarket@bbva.com
¿Para qué y por qué utilizamos tus datos personales?
Para la ejecución y gestión de tu solicitud, en concreto, descargar el e-book/s solicitado.
BBVA informa te informa de que, salvo que indiques tu oposición enviando un correo a la siguiente dirección:contact.bbvaapimarket@bbva.com, BBVA podrá enviarte comunicaciones comerciales, encuestas y eventos relativas a productos y/o servicios de BBVA API Market a través de medios electrónicos.
¿Durante cuánto tiempo conservaremos tus datos?
Conservaremos tus datos mientras sea necesario para la gestión de la solicitud, así como para el envío de comunicaciones comerciales, eventos y/o, encuestas. BBVAconservará tus datos hasta que te des de baja para dejar de recibir dichas comunicaciones o, en su caso, hasta que finalice el servicio.Después, destruiremos tus datos.
¿Cómo puedo darme de baja para dejar de recibir newsletters y/o comunicaciones de BBVA API Market?
Puedes darte de baja en cualquier momento y sin necesidad de indicarnos ninguna justificación, remitiendo un correo electrónico a la siguiente dirección:contact.bbvaapimarket@bbva.com
¿A quién comunicaremos tus datos?
No cederemos tus datos personales a terceros, salvo que estemos obligados por una ley o que tú lo consientas previamente.
¿Cuáles son tus derechos cuando nos facilitas tus datos?
Consultar los datos personales que se incluyan en los ficheros de BBVA (derecho de acceso)
Solicitar la modificación de tus datos personales (derecho de rectificación)
Solicitar que no se traten tus datos personales (derecho de oposición)
Solicitar la supresión de tus datos personales (derecho de supresión)
Limitar el tratamiento de tus datos personales en los supuestos permitidos (limitación del tratamiento)
Recibir así como a transmitir a otra entidad, en formato electrónico, los datos personales que nos hayas facilitado y aquellos que se han obtenido de tu relación con BBVA (derecho de portabilidad)
Puedes ejercitar ante BBVA los citados derechos a través de la siguiente dirección:contact.bbvaapimarket@bbva.com
Te responsabilizas de la veracidad de los datos personales que facilitas a BBVA y de mantenerlos debidamente actualizados.
Si consideras que no hemos tratado tus datos personales de acuerdo con la normativa, puedes contactar con el Delegado de Protección de Datos de BBVA en la dirección dpogrupobbva@bbva.com
Puedes encontrar más información en el documento “Política de Protección de Datos Personales ” de esta página web.
Banco Bilbao Vizcaya Argentaria, S.A. titular de este portal utiliza cookies y/o tecnologías similares propias y de terceros para fines técnicos, de personalización, analíticos, de publicidad comportamental o publicidad relacionada con tus preferencias sobre la base de un perfil elaborado a partir de tus hábitos de navegación (por ejemplo, páginas visitadas). Si deseas obtener información más detallada, consulta nuestra Política de Cookies.
Panel de configuración de cookies
Este es el configurador avanzado de cookies propias y de terceros. Aquí puedes modificar parámetros que afectarán directamente a tu experiencia de navegación en esta web.
Cookies técnicas (necesarias)
Estas cookies son importantes para darte acceso seguro a zonas con información personal o para reconocerte cuando inicias sesión.
Denominación
Titular
Duración
Finalidad
gobp.lang
BBVA
1 mes
Preferencia de idioma
aceptarCookies
BBVA
1 año
Configuración Cookies aceptadas
_abck
BBVA
1 año
Ayuda a protegerse contra los ataques de sitios web maliciosos
bm_sz
BBVA
4 horas
Ayuda a protegerse contra los ataques de sitios web maliciosos
ADRUM_BTs
Salesforce Marketing Cloud
Sesión
Requerido para la supervisión del servicio, inherente al SFMC
ADRUM_BT1
Salesforce Marketing Cloud
Sesión
Requerido para la supervisión del servicio, inherente al SFMC
ADRUM_BTa
Salesforce Marketing Cloud
Sesión
Requerido para la supervisión del servicio, inherente al SFMC
ADRUM_BT
Salesforce Marketing Cloud
Sesión
Requerido para la supervisión del servicio, inherente al SFMC
xt_0d95e
Salesforce Marketing Cloud
Sesión
Recordar las preferencias del usuario (si las hay)
__s9744cdb192d044faa1bf201d29fafd1e
Salesforce Marketing Cloud
Sesión
Recordar las preferencias del usuario (si las hay)
wpml_browser_redirect_test
WPML
Sesión
Traducción de textos del portal
wp-wpml_current_language
WPML
24 horas
Traducción de textos del portal
Permiten medir, de forma anónima, el número de visitas o la actividad. Gracias a ellas podemos mejorar constantemente tu experiencia de navegación.
Dispones de una mejora continua en la experiencia de navegación.
Con tu selección no podemos ofrecerte una mejora continua en la experiencia de navegación.
Denominación
Titular
Duración
Finalidad
AMCV_***
Adobe Analytics
Sesión
ID de visitante único que se usan en las soluciones de Marketing Cloud
AMCVS_***
Adobe Analytics
2 años
ID de visitante único que se usan en las soluciones de Marketing Cloud
demdex (safari)
Adobe Analytics
180 días
Crear y almacenar identificadores únicos y persistentes
sessionID
Adobe Analytics
Sesión
Cookie interna de Launch usada para identificar al usuario
gpv_URL
Adobe Analytics
Sesión
plugin Adobe Analytics: getPreviousValue Capturar el valor de una determinada variable en la siguiente vista de página, en este caso la prop1
gpv_level1
Adobe Analytics
Sesión
Cookie utilizada para almacenar el levl1 del DataLayer de la página anterior.
gpv_pageIntent
Adobe Analytics
Sesión
Cookie utilizada para almacenar el pageIntent de la página anterior.
gpv_pageName
Adobe Analytics
Sesión
Cookie utilizada para almacenar el pagename de la página anterior.
aocs
Adobe Analytics
Sesión
Cookie que almacena los primeros valores recogidos al inicio de un proceso.
TTC
Adobe Analytics
Sesión
Cookie usada para almacenar el tiempo transcurrido entre el evento App Page Visit y App Completed.
TTCL
Adobe Analytics
Sesión
Cookie usada para almacenar el tiempo transcurrido entre el evento LogIn y App Completed.
s_cc
Adobe Analytics
Sesión
Determinar si las cookies están activas
s_hc
Adobe Analytics
Sesión
Cookie usada por Adobe con propositos de analítica.
s_ht
Adobe Analytics
Sesión
Cookie usada por Adobe con propositos de analítica.
s_nr
Adobe Analytics
2 años
Determinar el número de visitas de usuario
s_ppv
Adobe Analytics
Persistente
plugin Adobe Analytics: getPercentPageViewed Determinar el procentaje de página que visualiza un usuario
s_sq
Adobe Analytics
Sesión
Funcionalidades ClickMap/ActivityMap
s_tp
Adobe Analytics
Sesión
Cookie usada por Adobe con propositos de analítica.
s_visit
Adobe Analytics
2 años
Cookie usada por Adobe para saber cunado una sesión se ha iniciado.
Permiten que la publicidad que te mostramos sea personalizada y relevante para ti. Gracias a estas cookies no verás anuncios que no te interesen.
Dispones de una publicidad adaptada a ti y a tus preferencias.
Con tu selección pierdes la personalización de la publicidad, solo verás anuncios genéricos.
Denominación
Titular
Duración
Finalidad
OT2
VersaTag
90 días
Cookie de VersaTag usada para almacenar un id de usuario y el numero de visitas del usuario.
u2
VersaTag
90 días
Cookie de VersaTag en la que se almacena el ID del usuario
TargetingInfo 2
MediaMind
1 año
Cookie que sirve para asignar un número unico random que genera MediaMind.
Estas cookies están relacionadas con características generales como, por ejemplo, el navegador que utilizas.
Dispones de una experiencia y contenidos personalizados.
Con tu selección no podemos ofrecerte una navegación y contenidos personalizados.
Denominación
Titular
Duración
Finalidad
mbox
Adobe Target
9 días
Cookie usada por Adobe Target para hacer test de personalizacion de experencia del usuario.
×
Parece que estás navegando desde México, así que vamos a mostrarte el contenido personalizado para tu localización. Cambiar
Parece que estás navegando desde España, así que vamos a mostrarte el contenido personalizado para tu localización. Cambiar
Selecciona el país
Para poder acceder al área privada y sandbox correspondiente, selecciona el país de las APIs que quieres utilizar.
×
×
×
Preferencias de Navegación
Elige el país del que quieres que te mostremos su contenido por defecto.