into app angularjs angularjs-routing angularjs-controller

app - Especificando el controlador AngularJS: beneficios usando ngController vs. $ routeProvider



ng-app (2)

Esta pregunta realmente se reduce al diseño y, como tal, se basa un poco en la opinión. Eso en mente, la mejor guía que conozco es:

  • $routeProvider : le permite especificar un solo controlador para una plantilla. Como esto forma parte del enrutamiento, facilita la búsqueda del controlador que acompaña a la página. Uso esto para almacenar y cargar la lógica global de la página en lugar de la lógica específica del elemento.

    Esto también es importante porque significa que puede cargar exactamente la misma plantilla para dos rutas diferentes, pero el comportamiento y los datos podrían ser diferentes porque se puede cambiar el controlador. Esto no es algo que sea fácil de hacer con la opción ngController .

  • ngController : esto ngController al controlador a un elemento específico en la página / plantilla. Eso puede hacer que el código sea más fácil de leer cuando necesita varios controladores en una sola página y permite que el controlador tenga un ámbito más específico.

Así que realmente se reduce al alcance y la intención . Esperemos que estas reglas ayuden a la hora de decidir cuál usar.

Hay dos formas (AFAIK) para asociar un controlador con una plantilla de vista / parcial: la ruta especificada en $routeProvider y la directiva ngController . Especialmente (pero no exclusivamente) para enrutamiento simple, ¿hay algún beneficio / eficiencia de uno sobre el otro?

Mi proyecto actualmente utiliza el enfoque $ routeProvider, pero se me ha asignado la tarea de anidar vistas. Esto parece bastante simple con ngInclude, siempre que el parcial especifique su ngController.


Si piensa en una vista que incluye todos los scripts como un paquete independiente, desarrollado por una sola persona o equipo, entonces ngController es el camino a seguir, imho.

$routeProvider otro lado, $routeProvider proporciona funciones avanzadas como la inyección de valores a través de la propiedad de resolve de la ruta. De esa manera, puede hacer que sus datos cargados AJAX se inyecten directamente en su controlador, por ejemplo, en lugar de que el controlador tenga que obtenerlo. O haga que la ruta cambie para esperar esos datos, etc.

Por cierto: si necesita enrutamiento y vistas anidadas, puede echar un vistazo a ui-router angular