ng-transcludeã«ãã£ãŠãã£ã¬ã¯ãã£ãã«æž¡ãå ŽåãïŒãã£ã¬ã¯ãã£ãã«å®è£ ãããng-repeat = "item incollection"ãä»ããŠïŒç¹°ãè¿ãããåç §{{item}}ãæã€htmlã³ã³ãã³ãã¯ããŒãžã§ã³1.2.18ã§ã¯æ©èœããŸããã
ãããããŒãã£ã @petebacondarwinã¯ãããã®å¥ã®1
ïŒå€åïŒé¢é£ïŒ https ïŒ
æ²ããããšã«ãããã¯ng-transclude
ãã©ã³ã¹ã¯ã«ãŒãžã§ã³ãæ©èœããæ¹æ³ã§ã¯ãããŸããã ããªããããããšããŠããã®ã¯ãããªãèªèº«ã®ãã£ã¬ã¯ãã£ãå
ã§äœãã¹ã¿ã³ãã¢ãŠããããã®ããã³ãã¬ãŒãããšããŠãã®åãå©çšããã³ã³ãããã£ã¬ã¯ãã£ããäœæããããšã§ãã
ç§ã¯éå»ã«äœåºŠãããã«ééããããã«ã€ããŠãã¹ã³ãšé·ãè°è«ãããŸããã ãã©ã³ã¹ã¯ã«ãŒãžã§ã³ãããã³ã³ãã³ãã¯ãå®çŸ©äžããã£ã¬ã¯ãã£ããã€ã³ã¹ã¿ã³ã¹åãããå Žæã®ã¹ã³ãŒãã«ãã€ã³ããããŸãã ãã£ã¬ã¯ãã£ãã®ãã³ãã¬ãŒãã®ç¯å²ã§ã¯ãããŸããã
以åã¯ããã¹ãããããã©ã³ã¹ã¯ã«ãŒãžã§ã³ã·ããªãªãé¢ä¿ããå Žåã«ãå®éã«ãã©ã³ã¹ã¯ã«ãŒãžã§ã³ãééã£ãã¹ã³ãŒãã«ãã€ã³ãããŠãããããããã¯æ©èœããŠããå¯èœæ§ããããŸãã
ãããã£ãŠãå®éã«ããã§ãã©ã³ã¹ã¯ã«ãŒãžã§ã³ã䜿çšããå¿ èŠã¯ãããŸãããå®éã«å®è¡ããããšããŠããã®ã¯ãå éšHTMLãç¬èªã®ãã³ãã¬ãŒãã«æ¿å ¥ããããšã ãã ããã§ãã ããã¯ã次ã®ãããªã³ã³ãã€ã«é¢æ°ã§å®è¡ã§ããŸãã
http://plnkr.co/edit/j3NwMGxkVRM6QMhmydQC?p=preview
app.directive('test', function(){
return {
restrict: 'E',
compile: function compile(tElement, tAttrs, tTransclude) {
// Extract the children from this instance of the directive
var children = tElement.children();
// Wrap the chidren in our template
var template = angular.element('<div ng-repeat="item in collection"></div>');
template.append(children);
// Append this new template to our compile element
tElement.html('');
tElement.append(template);
return {
pre: function preLink(scope, iElement, iAttrs, crtl, transclude) {
scope.collection = [1, 2, 3, 4, 5];
},
post: function postLink(scope, iElement, iAttrs, controller) {
console.log(iElement[0]);
}
};
}
};
});
ããã®å¥ã®äŸïŒç§ã¯ä¿¡ããŠããŸãïŒïŒ
Index.htmlïŒ
<html ng-app='myApp'>
<head>
<title>AngularJS Scopes</title>
<script src="//ajax.googleapis.com/ajax/libs/angularjs/1.2.1/angular.min.js"></script>
<script src='index.js'></script>
</head>
<body ng-controller='myController'>
<people>Hello {{person.name}}</people>
</body>
</html>
index.jsïŒ
var myApp = angular.module( 'myApp', [] );
myApp.controller( 'myController', function( $scope ) {
$scope.people = [
{ name: 'Rob' },
{ name: 'Alex' },
{ name: 'John' }
];
});
myApp.directive( 'people', function() {
return {
restrict: 'E',
transclude: true,
template: '<div ng-repeat="person in people" ng-transclude></div>',
}
});
Angular 1.2.1ã§åäœããŸãããã1.2.18ã§ã¯åäœããŸããã§ããã
眪ã®ãªãéçºè ã¯ãäžèšã®ã³ãŒããæ©èœããããšããæåŸ ã§ããŸããã§ããã ãã®ããã¥ã¡ã³ãã«ã¯æ¬¡ã®ããã«æžãããŠããŸãã
...æååããªããžã§ã¯ãã§ã¯ãªãããã³ãã¬ãŒãå šäœãæž¡ãããšãã§ããããšãæãŸããå ŽåããããŸãã ããã€ã¢ãã°ããã¯ã¹ãã³ã³ããŒãã³ããäœæãããšããŸãã ãã€ã¢ãã°ããã¯ã¹ã¯ãä»»æã®ã³ã³ãã³ããæãè¿ãããšãã§ããå¿ èŠããããŸãã
ngTranscludeã®ããã¥ã¡ã³ãã«ã¯æ¬¡ã®ããã«æžãããŠããŸãã
ãã©ã³ã¹ã¯ã«ãŒãžã§ã³ã䜿çšããæãè¿ã芪ãã£ã¬ã¯ãã£ãã®ãã©ã³ã¹ã¯ã«ãŒãžã§ã³ãããDOMã®æ¿å ¥ãã€ã³ããããŒã¯ãããã£ã¬ã¯ãã£ãã ãã®ãã£ã¬ã¯ãã£ããé 眮ãããŠããèŠçŽ ã®æ¢åã®ã³ã³ãã³ãã¯ããã©ã³ã¹ã¯ã«ãŒãžã§ã³ãããã³ã³ãã³ããæ¿å ¥ãããåã«åé€ãããŸãã
ããã¯@petebacondarwinã®å®çŸ©ãšã©ã®ããã«ç°ãªããŸããïŒ
...ç¬èªã®ãã£ã¬ã¯ãã£ãå ã§ã¹ã¿ã³ãã¢ãŠããããã®ã®ããã³ãã¬ãŒãããšããŠãã®åãå©çšããã³ã³ãããã£ã¬ã¯ãã£ããäœæããŸã
ãã©ã³ã¹ã¯ã«ãŒãžã§ã³ãããã§æ£ãã解決çã§ã¯ãªãçç±ãç§ã¯æ¬åœã«ç解ããŠããŸããã ã©ã¡ãããšããã°ãåççãªè§£æ±ºçã«ã¯ããã³ãã¬ãŒãã¹ã³ãŒãããã©ã³ã¹ã¯ã«ãŒãžã§ã³é¢æ°ã«æ¿å ¥ããããšãå«ãŸãããšæããŸãã
éãã¯ããã©ã³ã¹ã¯ã«ãŒãžã§ã³ãããã³ã³ãã³ãããå€éšããã€ãŸã<people>
èŠçŽ ãèŠã€ããå Žæã®ã¹ã³ãŒãã«ãã€ã³ããããããšã§ãã
äžæ¹ãå¿
èŠãªã®ã¯ãã€ã³ã©ã€ã³ãã³ãã¬ãŒãããå
éšããã€ãŸããã£ã¬ã¯ãã£ãã®ã¹ã³ãŒãã«ãã€ã³ãããããšã§ãã
ãã£ã¬ã¯ãã£ããç¬èªã®ã¹ã³ãŒããäœæããªãå Žåãããã¯ã»ãŒåãã§ãã ããšãã°ããã£ã¬ã¯ãã£ããåé¢ã¹ã³ãŒããäœæããå Žåãããã¯ééããªãåãããšã§ã¯ãããŸããã å
åŽã®ã¹ã³ãŒãã¯å€åŽã®ã¹ã³ãŒãã«ã¢ã¯ã»ã¹ã§ããŸããã
ãã³ãã¬ãŒãã¹ã³ãŒãããã©ã³ã¹ã¯ã«ãŒãžã§ã³é¢æ°ã«å®éã«æ¿å ¥ããç¬èªã®ãã£ã¬ã¯ãã£ããäœæã§ãããšæããŸã...
http://plnkr.co/edit/IbNqR0854V8yXnajKSFB?p=previewãåç §ããŠãã ãã
ããªããèšã£ãŠããããšã¯å®å šã«çã«ããªã£ãŠããŸã-ãããããã¯ããªããAngularã®æ·±ããç解ããŠããå Žåã«ã®ã¿ã§ãã ç§ã®ãã€ã³ãã¯ãäžèšã®äŸã¯ãããŸãäœåãªäœæ¥ãããªããŠããã©ããããããæ©èœããã¯ãã ãšããããšã§ãã
ãã©ã³ã¹ã¯ã«ãŒãžã§ã³é¢æ°ãäœããã®æ¹æ³ã§ãã³ãã¬ãŒãïŒãŸãã¯ãå éšãïŒã¹ã³ãŒãã«ã¢ã¯ã»ã¹ã§ããããã«ããããšã¯ãç§ã«ã¯éåžžã«åççã§éåžžã«å®çšçã§ããããã«æãããŸãã ãªããããå¿ èŠã«ãªãã®ããå€ãã®å ŽåèããããŸãã
ãŸã£ããåãåé¡ããã®ããã°ã§èª¬æãã
ãããŠãã³ãŒããã©ããããããšãã ç§ã¯ä»ã®äººã®å©çã®ããã«ããã§ãããè€è£œããŠããŸãïŒ
var myApp = angular.module( 'myApp', [] );
myApp.controller( 'myController', function( $scope ) {
$scope.people = [
{ name: 'Rob' },
{ name: 'Alex' },
{ name: 'John' }
];
});
myApp.directive( 'people', function() {
return {
restrict: 'E',
transclude: true,
template: '<div ng-repeat="person in people" inject></div>'
}
});
myApp.directive('inject', function(){
return {
link: function($scope, $element, $attrs, controller, $transclude) {
if (!$transclude) {
throw minErr('ngTransclude')('orphan',
'Illegal use of ngTransclude directive in the template! ' +
'No parent directive that requires a transclusion found. ' +
'Element: {0}',
startingTag($element));
}
var innerScope = $scope.$new();
$transclude(innerScope, function(clone) {
$element.empty();
$element.append(clone);
$element.on('$destroy', function() {
innerScope.$destroy();
});
});
}
};
});
:-)ç§ã¯ããã©ã³ã¹ã¯ã«ãŒãžã§ã³ã¯ãé ããããããããŒããŒããå©ãããããªãéããç解ãããããããã¯ã§ã¯ãªãããšã«åæããŸãã
ãããããng-transcludeããã©ã³ã¹ã¯ã«ãŒãžã§ã³ãããã³ã³ãã³ãããå€éšãã¹ã³ãŒãã«ãã€ã³ããããšããäºå®ã«ã€ããŠãããã¥ã¡ã³ããããã«æ確ã«ããå¿
èŠããããŸããïŒ
å人çã«ã¯ãå°ãªããšããã®éèŠãªããŒãžã«ããçŸåšã®ããã¥ã¡ã³ãã¯ãããªãæ確ã§æ確ã ãšæã
ãã®ãã©ã³ã¹ã¯ã«ãŒãžã§ã³ãªãã·ã§ã³ã¯æ£ç¢ºã«äœãããŸããïŒ transcludeã¯ããã®ãªãã·ã§ã³ã䜿çšããŠãã£ã¬ã¯ãã£ãã®ã³ã³ãã³ããããã£ã¬ã¯ãã£ãã®å éšã§ã¯ãªãå€éšã®ã¹ã³ãŒãã«ã¢ã¯ã»ã¹ã§ããããã«ããŸãã
ïŒãããŠã以äžã®ãã¹ãŠããããããã«èª¬æããŸãïŒã
ããããããªãããã¬ãŒã ã¯ãŒã¯ã«æäŸãããã£ã¬ã¯ãã£ããè¿œå ããŠãããããããããng-transclude-internalããšãã©ã³ãåããããšãæ€èšããŸããïŒ ãtranscopeããšåŒã°ãããã£ã¬ã¯ãã£ãã䜿çšããŠãããã«ææŠãã人ãå°ãªããšããã1人ããããšãç§ã¯ç¥ã£ãŠããŸãã
ç§ã¯è§£æ±ºçãè©ŠããŸããããä»ã®åé¡ã«çŽé¢ããŸããããªãng-repeatã®èŠªã¹ã³ãŒãããã£ã¬ã¯ãã£ãã®ã¹ã³ãŒãã§ã¯ãªãã®ã§ããïŒ
@luboidãã©ã³ã«ãŒã§æ©èœããªãçç±ã¯ããã£ã¬ã¯ãã£ãã«åé¢ã¹ã³ãŒãããããå€æŽãããã³ã³ãã€ã«æžã¿DOMïŒã¡ãªã¿ã«ãããã¯ãã®åé¡ã解決ããããã®ã°ãããæ¹æ³ã§ãïŒã䜿çšããããã§ããåé¢ã¹ã³ãŒãã®èŠªã®å åŒã
ãããæåŸ ã©ããã«æ©èœãããããã®é©åãªæ¹æ³ã®äŸãè¿œå ããŸãã ïŒããããããã¯ãŸã äžè¬çã«ããªãã²ã©ããã¶ã€ã³ã§ããããããè¡ãæ£åœãªçç±ã¯ãããŸããïŒ
å®éãèããŠã¿ããšãng-repeatããã®ä»ã®èŠçŽ ãã©ã³ã¹ã¯ã«ãŒãžã§ã³ãã£ã¬ã¯ãã£ãã§ã¯ããããå®éã«ä¿®æ£ããããšã¯ã§ããŸããã ãããããããŒãžã§ã³1.2.0以éã¯æ©èœããŸãã
@petebacondarwinããã«æ¬åœã«åå¿è
ã®è³ªåããããŸãã åã«ïŒã®ä»£ããã«var innerScope
䜿çšããçç±ïŒ
myApp.directive( 'inject', function() {
return {
link: function( $scope, $element, $attrs, controller, $transclude ) {
if ( !$transclude ) {
throw minErr( 'ngTransclude' )( 'orphan',
'Illegal use of ngTransclude directive in the template! ' +
'No parent directive that requires a transclusion found. ' +
'Element: {0}',
startingTag( $element ));
}
$transclude( $scope, function( clone ) {
$element.empty();
$element.append( clone );
});
}
};
});
å ã®ãã£ã¬ã¯ãã£ããã¹ã³ãŒããªã©ãäœæãããè€éãªãã£ã¬ã¯ãã£ããšäœµçœ®ãããŠãããã©ããããããªããããæ°ããèŠçŽ ãã³ã³ãã€ã«ããå Žåã¯ãéåžžãæ°ããã¹ã³ãŒããäœæããã®ãæé©ã§ãããã ããååŸã§ããå ŽåããããŸããããã§ãããé¢ããŠ...
æäŒã£ãŠãããŠããããšãã
å€éšãã³ãã¬ãŒãïŒ$ templateCacheïŒã䜿çšããŸãããã®åŸãå°ãåçŽã«ãªããŸããåºæ¬ãã³ãã¬ãŒãã¯ãã£ã¬ã¯ãã£ãã¹ã³ãŒãã§ã³ã³ãã€ã«ãããŸãã
@ Izhaki @ petebacondarwinã€ã³ã¯ã«ãŒããã£ã¬ã¯ãã£ããããããšãããããŸãã ã€ãã«1.2.16ãã1.2.20ã«æŽæ°ãããŸããããã¢ããªãéåžžã«å£ãå§ããçç±ã確èªããã®ã«å°ãæéãããããŸããã
ãã®ã¹ã¬ãããèŠã€ããåã¯ããã©ã³ã¹ã¯ã«ãŒãžã§ã³ã¯éåžžã«åçŽãªæŠå¿µã ãšæã£ãŠããŸããã ãããã
ããã解決ããã®ãæäŒã£ãŠããããã¹ãŠã®äººã«æè¬ããŸãã 1.2.21ã«æŽæ°ãããšãããã§èª¬æããåé¡ã®ããã«ã€ã³ã¿ãŒãã§ã€ã¹ã®å€ããå£ããçŸåšã¯æ£ããæ¹åã«é²ãã§ããŸãã
@caitp @petebacondarwin ïŒ2ã€ã®è¿œå æ å ±ãååŸã§ããã°éåžžã«åœ¹ç«ã¡ãŸãã
äœãæ©èœããªããªã£ããã¯ç解ããŠããŸããããã®ãªãªãŒã¹ã®è¿ãã®å€æŽãã°ã«ããã®ç¹å®ã®åé¡ã«é¢é£ããŠãããšæãããç¹å®ã®ãã®ã¯èŠåœãããŸããã
https://github.com/angular/angular.js/blob/master/CHANGELOG.md#120 -timely-delivery-2013-11-08
ç§ã¯ç¹ã«ãããã«èšåããŠããŸãã
- åé¢ãã£ã¬ã¯ãã£ãïŒd0efd5eeïŒã«å±ããåã«ã®ã¿åé¢ã¹ã³ãŒããæž¡ããŸã
- åé¢ã¹ã³ãŒããçã«åé¢ããïŒ909cabd3ãïŒ1924ãïŒ2500ïŒ
ã§ãããœïŒàºÙÍàºïŒïŸãç¥ã£ãŠãããããäœã話ããŠããã®ããæ¬åœã«æãåºããŸããã
å€æŽãã°ã«ã¯ãå€æŽãšé倧ãªå€æŽã®2çš®é¡ã®ã¡ãã»ãŒãžãããããŸããã ããã¯é倧ãªå€æŽã§ã¯ãªãããã°ä¿®æ£ãšèŠãªãããŠããŸããã å€ãã®äººããã®åäœã䜿çšããããšãäºæž¬ããããšã¯å°é£ã§ããã ããããããã¯ãããã移è¡ããã¥ã¡ã³ãã«å ¥ãã¯ãã§ãïŒããã¯ããã€ãã®æãå¿ èŠã§ãïŒ
ç¿ ''ããã ãããã¯ãããã§ãã ãã©ã³ã¹ã¯ã«ãŒãžã§ã³ã«é¢é£ããå€æŽãæ¢ããŠããŸããããããã¯æããã«ããã©ã³ã¹ã¯ã«ãŒãžã§ã³ã«ä»éããåé¢ã¹ã³ãŒãã®å€æŽã§ãã ããããšãïŒ
ãã®å€æŽã«ãããã³ãŒããç ŽæããŸããã ãããã®ãã£ã¬ã¯ãã£ãã®person
å€æ°ã«ã¢ã¯ã»ã¹ãããããã芪ã¹ã³ãŒãã§äœ¿çšããããã®ç°¡åãªå®£èšåã®æ¹æ³ããããšbug
ã1.2.18ã§ä¿®æ£ãããåã«äœäººã®äººãããã䜿çšããŠããããèŠããšãããã¯äžè¬çãªäœ¿çšäŸã®ããã§ãã
ããã¯1.2.17ã§åäœãã1.2.18以éã§å£ãããã¢ã§ãã
@evgenyneu ïŒå éšã³ã³ãã³ããšã³ã³ãããã£ã¬ã¯ãã£ãã®äž¡æ¹ãå¶åŸ¡ãããšä»®å®ãããšããã©ã³ã¹ã¯ã«ãŒãžã§ã³ã®ä»£ããã«ng-includeã䜿çšããããšã¯æ確ã§ç°¡åã§ãããå¿ èŠãªç¶æ¿ãã¿ãŒã³ãåŸãããããšãããããŸããã ãã³ãã¬ãŒãåãå€éšãã£ã¬ã¯ãã£ã宣èšã®å±æ§ãšããŠæž¡ãã ãã§ã以åã«transcludeãã£ã¬ã¯ãã£ãããã£ãã®ãšåãå Žæã«ng-includeãã£ã¬ã¯ãã£ããé 眮ããŸãã åé¡ã解決ããŸããã
å éšã³ã³ãã³ããã³ãã¬ãŒãããã¥ãŒãã³ãã¬ãŒãäžã§ã€ã³ã©ã€ã³ã«ãããå Žåã¯ãng-templateã䜿çšããŠã以å䜿çšããŠããã®ãšåãäœçœ®ã«ãã³ãã¬ãŒããã©ããããŸãã
@xmlilley ããã°ããããã³ããã©ããããããšãããããŸããã ããã¯ç¢ºãã«æãã¯ãªãŒã³ãªã¢ãããŒãã§ãã
ãã¢ã¯æ¬¡ã®ãšããã§ãïŒ http ïŒ
http://plnkr.co/edit/fw7thti1u4F9ArxsuYkQ?p=preview ---å®ç§ã§ã¯ãããŸããããããã«å°éããŸãã
@caitp ãããããããããšãã ç§ãã¡ã¯ããããã®è§£æ±ºçãæã£ãŠããŸãïŒ
ãã®åé¡ãèŠãŠãã人ã®ããã«ãç§ã¯ãæ¹åããããng-transcludeãã£ã¬ã¯ãã£ããäœæããŸããããã®å±æ§å€ã¯ãæ±ããããå éšã¹ã³ãŒããå®çŸ©ãã3ã®ããããã«ãªããŸãã
䜿çšäŸïŒ
template:
'<div ng-transclude="parent">' +
'</div>'
ãã¹ãŠã®äŸã«ã€ããŠã¯ããã®ãã©ã³ã¯ãåç §ããŠãã ããã
åºåã¯æ¬¡ã®ããã«ãªããŸãã
.config(function($provide){
$provide.decorator('ngTranscludeDirective', ['$delegate', function($delegate) {
// Remove the original directive
$delegate.shift();
return $delegate;
}]);
})
.directive( 'ngTransclude', function() {
return {
restrict: 'EAC',
link: function( $scope, $element, $attrs, controller, $transclude ) {
if (!$transclude) {
throw minErr('ngTransclude')('orphan',
'Illegal use of ngTransclude directive in the template! ' +
'No parent directive that requires a transclusion found. ' +
'Element: {0}',
startingTag($element));
}
var iScopeType = $attrs['ngTransclude'] || 'sibling';
switch ( iScopeType ) {
case 'sibling':
$transclude( function( clone ) {
$element.empty();
$element.append( clone );
});
break;
case 'parent':
$transclude( $scope, function( clone ) {
$element.empty();
$element.append( clone );
});
break;
case 'child':
var iChildScope = $scope.$new();
$transclude( iChildScope, function( clone ) {
$element.empty();
$element.append( clone );
$element.on( '$destroy', function() {
iChildScope.$destroy();
});
});
break;
}
}
}
})
@ Izhaki -FWIWã+ 10ã çŸåšã®èŠåã«éåããŸããããäžè¬çãªãŠãŒã¹ã±ãŒã¹ã«èªçºçã«ã¢ã¯ã»ã¹ããããã®ã¯ãªãŒã³ã§å®£èšçãªæ¹æ³ãè¿œå ããŸãã ããããšãïŒ
ïŒ+1ïŒ @Izhakiã®ãœãªã¥ãŒã·ã§ã³çšã ããããã®ãŸãŸäœ¿çšããŸãããangularã«å«ãããšã¯ããã«å¿«é©ã«ãªããŸãã
+1
@Izhaki +1ãçŽ æŽãããäŸã§ãïŒ
ã«ã¹ã¿ã ãã©ã³ã¹ã¯ã«ãŒãžã§ã³ãã£ã¬ã¯ãã£ããããããšãã ããã©ã«ããäžæžãããã®ã§ã¯ãªããå¥ã®ã«ã¹ã¿ã ãã©ã³ã¹ã¯ã«ãŒãžã§ã³ãäœæããããšã«ãªããŸããã ãããã«ã¯ãã©ãããæ¥ãã®ãããããªãé¢æ°åŒã³åºããããã€ããããŸãã minErrïŒïŒããã³startingTagïŒïŒ
@ dehru-ãããã®é¢æ°ã¯AngularJSã®å éšã«ãããŸãã
@Izhakiã©ããããããšãïŒ èå³ãããã°ããã©ã³ã¹ã¯ã«ãŒãžã§ã³ãããã³ã³ãã³ããç¹°ãè¿ãããªãã®ãã©ã³ã¯ããã©ãŒã¯ããŸããã
ng-transclude = "parent"ãæåŸ
ã©ããã«æ©èœããªãå¯èœæ§ãããããšã«æ³šæããŠãã ããã
http://plnkr.co/edit/S6ngqz?p=preview
@IzhakiãšãŠãããã
è§åºŠãžã®ãã«ãªã¯ãšã¹ãã«å«ãŸããã¹ããã®ã®ããã«èŠããŸãã
å°ãªããšãGithubãªããžããªã䜿çšããå¥ã®ãã£ã¬ã¯ãã£ãã§ã¯ãå
¬éã§ãããšæããŸããïŒå€æŽãæäŸã§ããããã«...ïŒïŒ
ããããšã
ã€ã¶ããããã¯ãããã ç§ã¯ããªãã_å¿_ããŸãã
@Izhakiããã¯ãåã¹ã³ãŒãã®åé¡ã«å¯Ÿããéåžžã«åªãããœãªã¥ãŒã·ã§ã³ã§ãã ããããšãã
ããããç§ã¯æ··ä¹±ããŠããŠã$ transcludeé¢æ°ã®ç¶æ¿ãå€éšãã£ã¬ã¯ãã£ãããngTranscludeãã£ã¬ã¯ãã£ãã«ã©ã®ããã«äŒããã®ã説æã§ãããã©ããçåã«æã£ãŠããŸãããïŒ ç§ãèŠã€ããããšãã§ããå
¬åŒã®å Žæã¯ã©ãã«ãæ瀺ãããŠããŸãããããªã³ã¯é¢æ°ã§$ transcludeé¢æ°ã䜿çšããã«ã¯ããã£ã¬ã¯ãã£ãã§transclude: true
ã䜿çšããå¿
èŠããããšæããŸããã ã³ãŒããå°ãè©ŠããŠã¿ããšããã transclude: true
å®éã«ã³ãŒããå£ããŠããããšãããããŸããã äœãèµ·ããŠãïŒ
ç§ã¯ãããšäœæ¥ãæŠã£ãã ãã§ãªãããã©ã³ã¹ã¯ã«ãŒãžã§ã³ããã©ã³ã¹ã¯ã«ãŒãžã§ã³ãããèŠçŽ ããããã«çœ®ãæããã®ã§ã¯ãªãããã©ã³ã¹ã¯ã«ãŒãžã§ã³ãã¬ãŒã¹ãã«ããŒå ã«æ¿å ¥ãããšããäºå®ããããŸããã
ng-transclude-replaceãäž¡æ¹ã®åé¡ãåŠçããããšãããããŸããïŒ http://gogoout.github.io/angular-directives-utils/#/api/ng -directives-utils.transcludeReplace
ng-repeatãã£ã¬ã¯ãã£ããrepeatedãã£ã¬ã¯ãã£ãèªäœãŸãã¯ãã®ãããªãã®ã«äŒæããå¿ èŠã¯ãããŸããïŒ ãã¹ãŠã®æ€èšŒ/ãã€ã³ãã£ã³ã°ãå«ãããã¹ãŠãæ©èœããŠããããã«èŠããŸãã
ãããç§ã®ã³ãŒãã®ã¹ããããã§ãïŒ
<form-field label="Roles" required>
<checkbox-group>
<checkbox ng-repeat="role in roles" label="{{role.description}}">
<input type="checkbox" name="selectedRoles" ng-model="role.selected" value="{{role.description}}" ng-required="!hasRole" />
</checkbox>
</checkbox-group>
</form-field>
@abobwhite ng-
ç§ã¯æè¿ãã®åé¡ã«ééããŸããã @Izhakiã¯ç§ã®ããã«åããŠããŸãããããã®è°è«ããã®éã«ãã¹ããã©ã¯ãã£ã¹ãåºçŸãããã©ããèå³ããããŸãã ç¹ã«ã ng-transclude="sibling | parent | child"
ãè§åºŠã³ã¢ã®äžéšã«ããããšã«é¢å¿ã¯ãããŸãããïŒ
@ telekid-çŸåšããã®æ©èœãã³ã¢ã«å«ããäºå®ã¯ãããŸããã
解決çãšåé¿çããããšæããŸããããã£ã¬ã¯ãã£ãã®å éšã¹ã³ãŒãã«ã¢ã¯ã»ã¹ããæ¹æ³ãããã°éåžžã«äŸ¿å©ã§ãã
ç§ããã£ãããšã¯ã $parent
ã䜿çšããããš
ã ããç§ã¯æ¬¡ã®ãããªãã®ãæã£ãŠããŸãïŒ
angular.module('test').directive('myDirectiveWithTransclusion', function() {
return {
restrict: 'E'
transclude: {
transcludeThis: 'transcludeThis'
}
template: "<div ng-repeat='item in array'><div ng-transclude='transcludeThis'></div></div>"
}
})
<my-directive-with-transclusion>
<transclude-this>
{{$parent.item}}
</transclude-this>
</my-directive-with-transclusion>
ããã«ã¡ã¯@ moneytree-dougïŒç§ã¯ããªããæäŸãããã®ãœãªã¥ãŒã·ã§ã³ã䜿çšããŸããããã©ã³ã¹ã¯ã«ãŒãžã§ã³ã®ã¹ã³ãŒããèŠã€ããŸãã-ããã¯ãŸã ãã£ã¬ã¯ãã£ãã¹ã³ãŒãã§ãããng-repeatã«ãã£ãŠçæãããæ°ããã¹ã³ãŒãã®åã§ã¯ãããŸããã ããã€ãææ¡ãããã ããŸããïŒ
@szetinäœãèµ·ãã£ãŠããã®ããäœãæåŸ ããŠããã®ãã瀺ãjsfiddleãäœæããŠããã ããŸãããã
æãåèã«ãªãã³ã¡ã³ã
ç§ããã£ãããšã¯ã
$parent
ã䜿çšããããšã ããç§ã¯æ¬¡ã®ãããªãã®ãæã£ãŠããŸãïŒ