Разве не должно быть директивы 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}}
Это кажется бесконечно полезным для меня.
Я что-то здесь упускаю? Просто создаешь себе проблемы?