Разве не должно быть директивы AngularJS ngWith?

Может я'Я сумасшедший или слишком привыкKnockoutJS, но я продолжаю искать в документах директиву ngWith, чтобы определить область действия для элемента, в контроллере или для включенного (ngInclude) частичного.

Например: я

Я хотел бы написать контроллер, который увеличивает MyItem, как:

MyModule.controller('MyItemCtrl', function($scope) {
    $scope.doSomethingToItem = function() {
        $scope.name = "bar";
    };
});

Или представление / шаблон для MyItem, например:


    {{name}}
    Do Something

Но в обоих этих случаях яя воображаю, что моя область видимости прототипически наследуется от моей модели.MyItem

Но сфера нет наследовать от модели!

Что ставит меня в тупик.

Вместо этого моя модельимущество по объему.

В случае ретранслятора:


    
        {{item.name}}
        Do Something
    

что означает везде, где я должен использоватьitem.this или жеitem.that вместо простоthis а такжеthat, Я должен помнить, какие функции являются родными для модели, а какие были применены непосредственно к области видимости контроллером.

Если я хочу иметь частичное для отображения имен(глупый пример, я знаю, но вы поняли)

{{name}}

Я должен написать это

{{item.name}}

а затем убедитесь, что модельвсегда вещь. Обычно, оборачивая его в директиву просто, чтобы определить область сitem имущество.

То, что я часто чувствую, что я хочу сделать, это просто:


или же

            
    {{name}}
    Do Something

Есть ли какая-то магическая директива, которой я не имею?т нашли? Или я совершенно не прав и просто ищу неприятности?

Благодарю.

РЕДАКТИРОВАТЬ:

Большое спасибо Брэндону Тилли за объяснение опасности использования прицелов в качестве моделей. Но я все еще часто нахожу необходимость в некоторых быстрых декларативных манипуляциях с областью действия и желаю директивы ng-with.

Возьмем, к примеру, у вас список элементов, который при щелчке показывает расширенный вид выбранного элемента. Вы можете написать что-то вроде:


    {{item.minView}}


    {{selection.maxView}}

теперь вы должны получить свойства выбранного элемента, используяselection.property а не то, что яхочу:item.property, Я'Я также должен использоватьselection вItemController! Делая это полностью в сочетании с этим взглядом.

Я знаю, что в этом простом примере у меня мог бы быть контроллер упаковки, чтобы он работал, но это иллюстрирует суть.

мы написали очень простойwith директива:

myApp.directive('with', ['$parse', '$log', function(parse, log) {

    return {
        scope: true,
        link: function(scope, el, attr) {
            var expression = attr.with;
            var parts = expression.split(' as ');

            if(parts.length != 2) {
                log.error("`with` directive expects expression in the form `String as String`");
                return;
            }

            scope.$watch(parts[0], function(value) {
                scope[parts[1]] = value;
            }, true);
        }
    }

}]);

это просто создает новую область видимости при разборе одного выражения на другое значение, позволяя:


    {{item.minView}}


    {{item.maxView}}

Это кажется бесконечно полезным для меня.

Я что-то здесь упускаю? Просто создаешь себе проблемы?

Ответы на вопрос(4)

Ваш ответ на вопрос