ng-transcludeλ‘ μ§μλ¬Έμ μ λ¬ν λ λ°λ³΅νλ €λ μ°Έμ‘° {{item}}κ° μλ html μ½ν μΈ (μ§μμ΄μ ꡬνλ ng-repeat="item in collection"μ ν΅ν΄)λ λ²μ 1.2.18μμ μλνμ§ μμ΅λλ€.
μ€ λ²μ¬. @petebacondarwin μ΄ μ€ νλλ₯Ό μννκ³ μΆμ΅λκΉ? μ΄κ²μ μ€μ λ‘ "ng-transcludeλ‘ νμ λ²μλ₯Ό λ§λ€μ§ λ§μμμ€"λΌλ κ²μ λλ€. λ¨μ§ κ³ μ₯μΌλ‘ μΈν΄ μ΄ κ²½μ°μ μ΄μ μ μλνμ λΏμ λλ€.
(μλ§λ) κ΄λ ¨: https://github.com/angular/angular.js/issues/7842
μ¬νκ²λ μ΄κ²μ ng-transclude
transclusionμ΄ μλνλ λ°©μμ΄ μλλλ€. λΉμ μ΄ νλ €κ³ νλ κ²μ μμμ λΉμ μμ μ μ§μλ¬Έ λ΄μμ μ€ν¬ν μμν λ΄μ©μ "ν
νλ¦Ώ"μΌλ‘ μ¬μ©νλ 컨ν
μ΄λ μ§μλ¬Έμ λ§λλ κ²μ
λλ€.
λλ κ³Όκ±°μ μ΄κ²μ λͺ λ² λ§λ¬κ³ κ·Έκ²μ λν΄ Miskoμ κΈ΄ ν λ‘ μ νμ΅λλ€. νΈλμ€ν΄λ£¨λλ μ½ν μΈ λ μ μμ λ°λΌ μ§μλ¬Έμ΄ μΈμ€ν΄μ€νλλ μ₯μμ λ²μμ λ°μΈλ©λ©λλ€. μ§μλ¬Έ ν νλ¦Ώμ λ²μκ° μλλλ€.
μ΄μ μλ μ€μ²©λ transclusion μλ리μ€μ κ΄λ ¨λ μΌλΆ κ²½μ°μ transclusionμ μλͺ»λ λ²μμ μ€μ λ‘ λ°μΈλ©νκΈ° λλ¬Έμ μ΄κ²μ΄ μλνμ μ μμ΅λλ€.
λ°λΌμ μ€μ λ‘ μ¬κΈ°μμ transclusionμ μ¬μ©ν νμκ° μμ΅λλ€. μ€μ λ‘ νλ €λ κ²μ λ΄λΆ 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 λ¬Έμ μμλ λ€μκ³Ό κ°μ΄ λ§ν©λλ€.
transclusionμ μ¬μ©νλ κ°μ₯ κ°κΉμ΄ λΆλͺ¨ μ§μλ¬Έμ transcluded DOMμ λν μ½μ μ§μ μ νμνλ μ§μλ¬Έ. μ΄ μ§μλ¬Έμ΄ μλ μμμ κΈ°μ‘΄ λ΄μ©μ ν¬ν¨λ λ΄μ©μ΄ μ½μ λκΈ° μ μ μ κ±°λ©λλ€.
μ΄κ²μ @petebacondarwin μ μμ μ΄λ»κ² λ€λ₯Έ
...μμ μ μ§μλ¬Έ λ΄μμ μ€ν¬ν μμν λ΄μ©μ "ν νλ¦Ώ"μΌλ‘ μμμ μ¬μ©νλ 컨ν μ΄λ μ§μλ¬Έμ λ§λλλ€.
λλ μ transclusionμ΄ μ¬κΈ°μμ μ¬λ°λ₯Έ ν΄κ²°μ± μ΄ μλμ§ μ΄ν΄νμ§ λͺ»ν©λλ€. 무μμ΄λ ν νλ¦Ώ λ²μλ₯Ό transclusion κΈ°λ₯μ μ£Όμ νλ κ²κ³Ό κ΄λ ¨λ ν©λ¦¬μ μΈ μ루μ μ κΈ°λν©λλ€.
μ°¨μ΄μ μ νΈλμ€ν΄λ£¨λλ μ½ν
μΈ κ° "μΈλΆ", μ¦ <people>
μμκ° μλ μ₯μμ λ²μμ λ°μΈλ©λλ€λ κ²μ
λλ€.
λ°λ©΄μ μνλ κ²μ μΈλΌμΈ ν
νλ¦Ώμ΄ "λ΄λΆ", μ¦ μ§μλ¬Έ λ²μμ λ°μΈλ©λλ κ²μ
λλ€.
μ§μλ¬Έμ΄ μ체 λ²μλ₯Ό μμ±νμ§ μλ κ²½μ° μ΄λ κ±°μ λμΌν©λλ€. μ§μλ¬Έμ΄ κ²©λ¦¬ λ²μλ₯Ό μμ±νλ κ²½μ°, μλ₯Ό λ€μ΄ μ΄λ λΆλͺ
ν λμΌν κ²μ΄ μλλλ€. λ΄λΆ λ²μλ μΈλΆ λ²μμ μ‘μΈμ€ν μ μμ΅λλ€.
ν νλ¦Ώ λ²μλ₯Ό transclusion κΈ°λ₯μ μ€μ λ‘ μ£Όμ νλ κ³ μ ν μ§μλ¬Έμ λ§λ€ μ μλ€κ³ μκ°ν©λλ€...
λΉμ μ΄ λ§νλ κ²μ μλ²½ν©λλ€. κ·Έλ¬λ κ·Έκ²μ λΉμ μ΄ Angularμ κΉμ΄λ₯Ό μ΄ν΄νλ κ²½μ°μλ§ κ°λ₯ν©λλ€. λ΄ μμ μ μμ μκ° λ무 λ§μ μΆκ° μμ μμ΄ μ΄λ»κ²λ μλν΄μΌ νλ€λ κ²μ λλ€.
λ΄κ° 보기μ νΈλμ€ν΄λ£¨μ κΈ°λ₯μ΄ ν νλ¦Ώ(λλ 'λ΄λΆ') λ²μμ μ΄λ»κ²λ μ‘μΈμ€ν μ μλ€λ μ μμ λ§€μ° ν©λ¦¬μ μ΄κ³ λ§€μ° μ€μ©μ μ λλ€. μ μ΄κ²μ΄ νμνμ§ λ§μ κ²½μ°λ₯Ό μκ°ν μ μμ΅λλ€.
λμΌν λ¬Έμ κ° μ΄ λΈλ‘κ·Έμ μ€λͺ λμ΄ μμ΅λλ€. μ μ λ λ§μ μ¬λλ€μ΄ νμ¬ μν©μ λν΄ λΆνν κ²μ΄λΌκ³ μκ°ν©λλ€(μ΄ νλμ κ²°κ³Όλ‘ Githubμ μ΄λ―Έ λ§μ κ΄λ ¨ λ¬Έμ κ° μμ΅λλ€).
κ·Έλ¦¬κ³ μ½λμ λν΄ λλ¨ν κ°μ¬ν©λλ€. λ€λ₯Έ μ¬λλ€μ μ΄μ΅μ μν΄ μ¬κΈ°μ 볡μ νκ³ μμ΅λλ€.
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 μ΅μ μ μ νν 무μμ ν©λκΉ? transcludeλ μ΄ μ΅μ μ΄ μλ μ§μλ¬Έμ λ΄μ©μ΄ μ§μλ¬Έ λ΄λΆκ° μλ μΈλΆ λ²μμ μ‘μΈμ€ν μ μλλ‘ ν©λλ€.
(κ·Έλ¦¬κ³ λ€λ°λ₯΄λ λͺ¨λ κ²μ΄ μ΄κ²μ λ μ 보μ¬μ€λλ€).
λλ μλ§λ λΉμ μ΄ νλ μμν¬μ μ 곡ν μ§μλ¬Έμ μΆκ°νλ κ²μ κ³ λ €ν κ²μ λλ€. μλ§λ κ·Έκ²μ 'ng-transclude-internal'λ‘ λΈλλνν κ²μ λλ€. λλ 'transcope'λΌλ μ§μλ¬Έμ κ°μ§κ³ μ΄κ²μ λμ ν μ¬λμ μ΅μν ν λͺ λ μκ³ μμ΅λλ€.
μ루μ μ μλνμ§λ§ λ€λ₯Έ λ¬Έμ μ μ§λ©΄νμ΅λλ€. μ ng-repeat μμ λ²μκ° μ§μλ¬Έ λ²μκ° μλλλ€.
@luboid νλ°μ»€ μμ μλνμ§ μλ μ΄μ λ μ§μλ¬Έμ 격리 λ²μκ° μκ³ μμ λ μ»΄νμΌλ DOM(μ΄ μμ μ μννμ§ λ§μμμ€. μ΄ λ¬Έμ λ₯Ό ν΄κ²°νλ μ΄λ¦¬μμ λ°©λ²μ)μ΄ μ¬μ©νκΈ° λλ¬Έμ λλ€. 격리 λ²μ λΆλͺ¨μ νμ μ λλ€.
μμλλ‘ μλνλλ‘ νλ μ μ ν λ°©λ²μ μλ₯Ό μΆκ°νκ² μ΅λλ€. (κ·Έλ¬λ μ΄κ²μ μΌλ°μ μΌλ‘ μ¬μ ν κ½€ λμ°ν λμμΈμ΄λ―λ‘ μ΄κ²μ ν μ΄μ κ° μμ΅λλ€)
μ¬μ€, ng-repeat λλ λ€λ₯Έ μμ transclusion μ§μλ¬Έμ μ¬μ©νλ©΄ μ€μ λ‘ μ΄κ²μ κ³ μΉ μ μλ€κ³ μκ°ν΄ 보μμμ€. μ, λ²μ 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 : λ κ°μ§ μΆκ° μ 보λ₯Ό μ»μ μ μλ€λ©΄ λ§€μ° λμμ΄ λ κ²μ λλ€.
λ μ΄μ μλνμ§ μλ κ²μ μ΄ν΄νμ§λ§ ν΄λΉ λ¦΄λ¦¬μ€ κ·Όμ²μ λ³κ²½ λ‘κ·Έμμ μ΄ νΉμ λ¬Έμ μ μκ΄κ΄κ³κ° μλ κ²μΌλ‘ 보μ΄λ νΉμ νλͺ©μ λ³Ό μ μμ΅λλ€.
https://github.com/angular/angular.js/blob/master/CHANGELOG.md#120 -timely-delivery-2013-11-08
λλ νΉν μ΄κ²λ€μ μΈκΈνκ³ μμλ€
- 격리 μ§μλ¬Έ(d0efd5ee)μ μνλ μμμκ²λ§ 격리 λ²μλ₯Ό μ λ¬ν©λλ€.
- 격리 λ²μλ₯Ό μ§μ μΌλ‘ 격리μν€μμμ€(909cabd3, #1924, #2500).
κ·Όλ° γ½ΰΌΌΰΊΩΝΰΊΰΌ½οΎ λ΄κ° λ¬΄μ¨ λ§μ νλμ§ μ΄μ κΈ°μ΅λ μ λλ€.
λ³κ²½ λ‘κ·Έμλ λ³κ²½ λ° μ£Όμ λ³κ²½μ΄λΌλ λ κ°μ§ μ’ λ₯μ λ©μμ§λ§ μμ΅λλ€. μ΄κ²μ μ£Όμ λ³κ²½ μ¬νμ΄ μλλΌ λ²κ·Έ μμ μΌλ‘ κ°μ£Όλμμ΅λλ€. λ§μ μ¬λλ€μ΄ μ΄ λμμ μ¬μ©νλ€κ³ μμΈ‘νκΈ° μ΄λ €μ μ΅λλ€. κ·Έλ¬λ μλ§λ λ§μ΄κ·Έλ μ΄μ λ¬Έμμ λ€μ΄κ°μΌ ν κ²μ λλ€(μ¬λμ΄ νμν¨)
μΌ' 'λν. κ·Έ μ¬λλ€μ λλ€. λλ transclusionκ³Ό κ΄λ ¨λ λ³νλ₯Ό μ°Ύκ³ μμμ§λ§ μ΄κ²μ λΆλͺ ν transclusionμ λΆμμ μΈ κ²©λ¦¬ λ²μμ λ³νμ λλ€. κ°μ¬ ν΄μ!
μ΄ λ³κ²½μΌλ‘ μΈν΄ μ½λλ μμλμμ΅λλ€. ν΄λΉ μ§μλ¬Έμ person
λ³μμ μ‘μΈμ€νκ³ μμ λ²μμμ μ¬μ©νλ μ¬μ΄ μ μΈμ λ°©λ²μ΄ μμΌλ©΄ μ’μ κ²μ
λλ€. μ΄ bug
κ° 1.2.18μμ μμ λκΈ° μ μ μΌλ§λ λ§μ μ¬λλ€μ΄ κ·Έκ²μ μ¬μ©νλμ§ λ³΄λ μΌλ°μ μΈ μ¬μ© μ¬λ‘μΈ κ² κ°μ΅λλ€.
λ€μμ 1.2.17μμ μλνκ³ 1.2.18 μ΄ν μ€λ¨λ λ°λͺ¨μ λλ€.
@evgenyneu : λ΄λΆ μ½ν μΈ μ 컨ν μ΄λ μ§μλ¬Έμ λͺ¨λ μ μ΄νλ€κ³ κ°μ νλ©΄
λ΄λΆ μ½ν μΈ ν νλ¦Ώμ΄ λ·° ν νλ¦Ώμ μΈλΌμΈλλλ‘ νλ €λ©΄ ng-templateμ μ¬μ©νμ¬ μ΄μ μ μ¬μ©νλ κ²κ³Ό λμΌν μμΉμ ν νλ¦Ώμ λννλ©΄ λ©λλ€.
@xmlilley , νλ₯ν ν, μ λ§ κ°μ¬ν©λλ€. κ·Έκ²μ μ€μ λ‘ κ°μ₯ κΉ¨λν μ κ·Ό λ°©μμ λλ€.
λ°λͺ¨λ λ€μκ³Ό κ°μ΅λλ€. http://plnkr.co/edit/4MwEL3?p=preview
μ¬λ¬λΆμ΄ λμ μ΄κ²μ ν μ μλ€λ κ²μ μκ³ μμ΅λλ€. http://plnkr.co/edit/fw7thti1u4F9ArxsuYkQ?p=preview --- μλ²½νμ§λ μμ§λ§ λΉμ μ κ±°κΈ°μ λ°λ €λ€μ€λλ€.
@caitp , κ°μ¬ν©λλ€. μ°λ¦¬λ λ§μ μ루μ μ κ°μ§κ³ μμ΅λλ€!
μ΄ λ¬Έμ λ₯Ό λ³΄κ³ μλ μ¬λλ€μ μν΄ 'ν₯μλ' ng-transclude μ§μλ¬Έμ λ§λ€μμ΅λλ€. μμ± κ°μ μ°Ύλ λ΄λΆ λ²μλ₯Ό μ μνκ³ λ€μ 3κ°μ§ μ€ νλκ° λ μ μμ΅λλ€.
μ¬μ© μ:
template:
'<div ng-transclude="parent">' +
'</div>'
λͺ¨λ μλ₯Ό λ³΄λ €λ©΄ μ΄ plunk λ₯Ό μ°Έμ‘°νμμμ€.
μΆλ ₯μ λ€μκ³Ό κ°μ΅λλ€.
.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 μ μ루μ μ μν΄. κ·Έλλ‘ μ¬μ©νκ² μ§λ§ μ΅κ·€λ¬μ ν¬ν¨λμ΄ μμΌλ©΄ ν¨μ¬ νΈν κ² κ°μμ.
+1
@Izhaki +1, μ’μ μμ λλ€!
μ¬μ©μ μ μ transclude μ§μμ΄μ κ°μ¬λ립λλ€. κΈ°λ³Έκ°μ μ¬μ μνλ λμ λ³λμ μ¬μ©μ μ μ transcludeλ₯Ό λ§λ€μμ΅λλ€. ν¨μΉμ λͺ κ°μ§ ν¨μ νΈμΆμ΄ μλλ° μ΄λμ μλμ§ λͺ¨λ₯΄κ² μ΅λλ€. minErr() λ° startingTag()
@dehru - μ΄ ν¨μλ AngularJS λ΄λΆμ μμ΅λλ€.
@Izhaki μ λ§ κ°μ¬ν©λλ€! κ΄μ¬ μλ μ¬λμ΄ μμΌλ©΄ ν¬ν¨λ μ½ν
μΈ λ₯Ό λ°λ³΅νλ κ·νμ plunkλ₯Ό λΆκΈ°νμ΅λλ€.
ng-transclude="parent"κ° μμλλ‘ μλνμ§ μμ μ μλ€λ μ μ μΈκΈν κ°μΉκ° μμ΅λλ€.
http://plnkr.co/edit/S6ngqz?p=preview
@Izhaki μμ£Ό μ’μ΅λλ€.
κ°λμ λν pull μμ²μ μμ΄μΌ ν κ² κ°μ΅λλ€.
μ μ΄λ Github repoκ° ββμλ λ³λμ μ§μλ¬Έμμ κ²μν μ μλ€κ³ μκ°νμλκΉ(κ·Έλμ μΌλΆ λ³κ²½ μ¬νμ μ 곡ν μ μμ΅λλ€....)?
κ°μ¬ ν΄μ
μ΄μν€, κ΅μ₯ν΄. λλ λΉμ μ _μ¬μ₯_ν©λλ€.
@Izhaki μ΄κ²μ μμ λ²μ λ¬Έμ μ λν μμ£Ό μ’μ ν΄κ²°μ± μ λλ€. κ°μ¬ ν΄μ.
λλ νΌλμ€λ¬μμ $transclude ν¨μμ μμμ΄ μΈλΆ μ§μλ¬Έμμ ngTransclude μ§μλ¬ΈμΌλ‘ μ΄λ»κ² μ λ¬λλμ§ μ€λͺ
ν μ μλμ§ κΆκΈν©λλ€. λ΄κ° μ°Ύμ μμλ 곡μ μ΄λμμλ λͺ
μ μ μΌλ‘ μΈκΈλμ΄ μμ§ μμ§λ§ λ§ν¬ κΈ°λ₯μμ $transclude κΈ°λ₯μ μ¬μ©νλ €λ©΄ μ§μλ¬Έμ transclude: true
λ₯Ό μ¬μ©ν΄μΌνλ€κ³ κ°μ νμ΅λλ€. μ½λλ₯Ό μ‘°κΈ κ°μ§κ³ λλ€κ° transclude: true
μ€μ λ‘ μ½λκ° κΉ¨μ§λλ€. λ¬΄μ¨ μΌμ΄μΌ?
λλ λ©°μΉ λμ μ΄κ²κ³Ό μΈμ κ³ , transcludeκ° transclude μμλ₯Ό λ체νλ λμ transclude μ리 νμμ μμ μ½μ νλ€λ μ¬μ€κ³Ό μΈμ μ΅λλ€.
ng-transclude-replaceκ° λ κ°μ§ λ¬Έμ λ₯Ό λͺ¨λ μ²λ¦¬νλ€λ κ²μ λ°κ²¬νμ΅λλ€! http://gogoout.github.io/angular-directives-utils/#/api/ng -directives-utils.transcludeReplace
ng-repeat μ§μλ¬Έμ λ°λ³΅ μ§μλ¬Έ μ체 λλ κ·Έμ μ μ¬ν κ²μΌλ‘ μ νν νμκ° μμ΅λλ€! λͺ¨λ μ ν¨μ± κ²μ¬/λ°μΈλ©μ ν¬ν¨νμ¬ λͺ¨λ μλνλ κ²μΌλ‘ 보μ λλ€.
λ€μμ λ΄ μ½λμ μΌλΆμ λλ€.
<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 - νμ¬λ‘μλ μ΄ κΈ°λ₯μ μ½μ΄μ ν¬ν¨ν κ³νμ΄ μμ΅λλ€.
μ루μ κ³Ό ν΄κ²° λ°©λ²μ΄ μμ§λ§ μ§μλ¬Έ λ΄λΆ λ²μμ μ‘μΈμ€ν μ μλ λ°©λ²μ΄ μμΌλ©΄ λ§€μ° νΈλ¦¬ν κ²μ λλ€.
@Izhakiκ° μμ±ν νΈλμ€ν΄λ£¨μ κ³Ό ν¨κ» μλνλλ‘ νμμ μ§μ νκ³
λΆκΈ°: https://github.com/NickBolles/ngTranscludeMod/tree/Angular1.5-multi-slot
ν보: https://github.com/Izhaki/ngTranscludeMod/pull/2
νλ°μ»€: http://plnkr.co/edit/5XGBEX0muH9CSijMfWsH?p=preview
λ΄κ° ν μΌμ $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 : κ·νκ° μ 곡ν μ΄ μ루μ μ μ¬μ©νμ§λ§ transcludeμ λ²μλ₯Ό μ°Ύμμ΅λλ€. μ΄κ²μ ng-repeatμ μν΄ μμ±λ μ λ²μμ μμμ΄ μλλΌ μ¬μ ν μ§μμ λ²μμ λλ€. λͺ κ°μ§ μ μμ ν΄μ£Όμ€ μ μλμ?
@szetin λΉμ μ΄ κΈ°λνλ κ²κ³Ό λ¬΄μ¨ μΌμ΄ μΌμ΄λκ³ μλμ§ λ³΄μ¬μ£Όλ jsfiddleμ μ¬λ € μ£Όμκ² μ΅λκΉ?
κ°μ₯ μ μ©ν λκΈ
λ΄κ° ν μΌμ
$parent
μ¬μ©νλ κ²λΏμ΄μμ΅λλ€. λ무 λ§μ κ²μ μΆκ°νμ§ μκ³ λ λ°λλΌμ κ°κΉμ΄ μ·μ₯μ λλ€.κ·Έλμ λλ λ€μκ³Ό κ°μ κ²μ κ°μ§κ³ μμ΅λλ€.