Каковы преимущества / недостатки декларативного шаблона? Подход ViewModel?
Когда мы говорим о декларативном синтаксисе в angularjs, мы обычно всегда приводим директивы, и как мы можем передать $scope
свойства в эти директивы для обработки, манипулирования DOM, сбора данных и, возможно, их различные комбинации.
Однако в настоящее время я пытаюсь убедить свою команду (не говоря уже о себе), что декларативный шаблон - это правильный подход. Это не обязательно означает использование директив, но как использовать директивы.
Следующая пара контроллер / шаблон показывает пример, где я отображаю элемент, основанный на свойствах "model"/$scope.
function MainController($scope) {
$scope.hasJQuery = true;
$scope.hasProblems = true;
$scope.hasLodash = false;
$scope.hasStuff = true;
}
<div ng-controller="MainController">
<span ng-if="hasJquery && hasProblems && hasLodash && hasStuff">TL;DR?</span>
<div>
Но другой подход может выглядеть так
function MainController2($scope) {
// Get/Retrieve $scope stuff...
// Setup "ViewModel" Data
$scope.hasJQueryAndProblemsAndLodashAndStuff = $scope.hasJQuery && $scope.hasProblems && $scope.hasLodash && $scope.hasStuff;
$scope.hasJQueryAndLodash = $scope.hasJQuery && $scope.hasLodash;
}
<div ng-controller="MainController">
<span ng-if="hasJQueryAndProblemsAndLodashAndStuff">...</span>
<span ng-class="hasJqueryAndLodash ? 'blue' : ''"></span>
</div>
Название является преувеличенной версией того, что может быть таким, как isReady
или же hasAll
но дело в том, чтобы показать, что иногда HTML потребует нескольких ng-class
атрибуты, где различные логики будут полагаться на $scope
свойства.
В основном я вижу первый пример того, с чем обычно идут люди - за исключением случаев, когда логика становится действительно сложной. Кроме того, я также знаю, что angularjs - это MVW, но это действительно не помогает мне.
Должен ли я только добавить "ViewModel" (логика представления) в $scope
в контроллере иногда? Все время? Никогда? И каковы преимущества / недостатки размещения логики представления в контроллере / шаблоне?