Мой разум все еще находится в мире WPF, и я вхожу в Angular.JS, который предоставляет несколько аналогий. Однако я не могу понять, как (если возможно) «переназначить» объем фрагмента, чтобы лучше использовать шаблоны.Пользовательское отображение области углового фрагмента
Рассмотрим следующий пример:
<html ng-app="myApp">
<body>
<div id="container" ng-controller="ContentCtrl">
<div ng-repeat="item in content">
<a href='#' ng-click="select(item)">{{item.title}}</a>
</div>
<hr>
<!-- here is the target fragment -->
<div ng-whatever="??? func(selected)">
<h1>{{title}}</h1>
<div ng-include="mapper($scope)"></div>
</div>
</div>
<script type="text/ng-template" id="entry-photo">
<div>
<span><a href="{{data}}"><img ng-src="{{data}}"></a></span>
</div>
</script>
<script type="text/ng-template" id="entry-video">
<div>
<iframe ng-src="{{data}}" width="280" height="200" frameborder="0" webkitAllowFullScreen mozallowfullscreen allowFullScreen></iframe>
</div>
</script>
<script type="text/ng-template" id="entry-notes">
<div>{{data}}</div>
</script>
</body>
</html>
и связанный с ним сценарий:
var app = angular.module('myApp', []);
function ContentCtrl($scope) {
$scope.selected = null;
$scope.content = [
{"content_type" : "image", "title" : "Image 00", "data" : "http://www.letsgodigital.org/html/review/panasonic/lumix-dmc-fx33/photography/panasonic-fx33_small8.jpg"},
{"content_type" : "video", "title" : "Video 00", "data" : "http://player.vimeo.com/video/37176398"},
{"content_type" : "notes", "title" : "Notes 00", "data" : "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nunc pulvinar pretium felis. Vivamus nibh felis, condimentum sit amet laoreet luctus, posuere auctor lorem. Nullam malesuada."}
];
$scope.select = function(e){
$scope.selected = e;
};
$scope.mapper = function(e){
switch(e.content_type){
case "image": return "entry-photo";
case "video": return "entry-video";
case "notes": return "entry-notes";
}
};
}
Конечно выше разметки НЕ работает, очевидно, потому, что изображено, как псевдо-код:
<div ng-whatever="??? func(selected)">
<h1>{{title}}</h1>
<div ng-include="mapper($scope)"></div>
</div>
Я хотел бы создать «пользовательский объем», (получена из исходной), так что любой нисходящий узел наследует измененное значение. В этом примере функция может быть просто значением свойства «selected».
Есть ли простой способ достичь этого?
Предположим, что мне больше интересно учиться, а не к любому совершенно другому обходу. Поскольку в WPF подобные ситуации очень распространены, но их просто решить, мне интересно, как это сделать в Angular.
Я боялась, что мой пример не лучший, и то есть ... Моя цель - определить «компоненты» над «интерфейсом». Если я использую $ parent с компонентом, он будет знать, где находится. Попытайтесь считать внутренний div вашего фрагмента фрагментом, который можно использовать где-то в другом месте, так как в $ scope раскрываются свойства. –
@MarioVernari, вы хотите использовать этот компонент в любом месте только как шаблон html, или хотите также использовать данные родительской области? –
мой реальный случай не прост, как указано выше. Шаблоны - это файлы (представления), вытащенные с сервера и используемые одним или несколькими способами на веб-странице. Если вам нравится, подумайте о шаблоне как о «фрейме», где вызывающий абонент предоставляет только URI. В содержимом фрейма нет ничего о нем: визуальный/логический родитель ... –