์ด๊ฒ์ ๋ณ๊ฒฝ ์์ฒญ์ ๊ฐ๊น๊ณ ๋ค๋ฅธ ์ฌ๋๋ค์ด ์ด๋ป๊ฒ ์๊ฐํ๋์ง๋ณด๊ณ ์ถ์ต๋๋ค.
๋ด ๊ฒธ์ํ ์๊ฒฌ์ผ๋ก๋ ng-transclude๋ ์์ฒด ๋ฒ์๋ฅผ ๋ง๋ค๊ฑฐ๋ ์ต์ํ ๊ทธ๋ ๊ฒํ๋ ๊ฒ์ ๋ฐฉ์ง ํ ์์๋ ๋ฐฉ๋ฒ์ ๊ฐ์ ธ์๋ ์๋ฉ๋๋ค. ๊ทธ ์ด์ ๋ transclusion์ ์์ฒญํ๋ ์ง์๋ฌธ์ด ์ด๋ฏธ ๋ฒ์๋ฅผ ๊ฐ์ง ๊ฒ์ธ์ง ๊ฒฉ๋ฆฌ ๋ ๋ฒ์๋ฅผ ๊ฐ์ง ๊ฒ์ธ์ง ๋๋ ์ ํ ๋ฒ์๋ฅผ ๊ฐ์ง ์์ ๊ฒ์ธ์ง๋ฅผ ์ง์ ํ๋ ๊ฒ์ ์๋ฏธํ๊ธฐ ๋๋ฌธ์ ๋๋ค. ng-transclude ์ง์๋ฌธ์ ์ฌ์ฉํ์ฌ ์ฝํ ์ธ ๋ฅผ ์ฝ์ ํ๋ ค๋ ์์น๋ฅผ ํ์ํฉ๋๋ค. ng-transclude๊ฐ ์์ ์ ํ์ ๋ฒ์๋ฅผ ๋ง๋ค๋ฉด ์ํ๋ ๋ฒ์์ ์ข ๋ฅ๋ฅผ ์ ์ํ๋ ์ง์๋ฌธ์ ๊ธฐ๋์น๋ฅผ ๊นจ๋จ๋ฆฌ๊ณ ์ธ๊ธฐ์๋ '๊ฐ์น'๋ '๊ฐ์ฒด. ๊ฐ'ํผ๋์ด ๋ํ๋ฉ๋๋ค.
๋ค์์ ๋ด ์๊ฒฌ์ผ๋ก๋ ์ ๋ฒ์๊ฐ ์๋ฏธ๊ฐ์๋ ์์ ๋๋ค.
ui.directive('box', function() {
return {
restrict: 'E',
transclude: true,
template: '<div ng-transclude/>',
replace: true,
scope: {}
};
});
์ด ์ง์๋ฌธ์ด ์ํ๋ ๊ฒ์ <box>content</box>
๋ฅผ <div>content</div>
๋ก ๋ฐ๊พธ๊ณ ๋ด์ฉ์ด ๊ฒฉ๋ฆฌ ๋ ๋ฒ์๋ฅผ ๊ฐ๋๋กํ๋ ๊ฒ์
๋๋ค.
์ด์ ๊ฐ์ด ์ค์ฒฉ ๋ ์ง์๋ฌธ ๊ตฌ์กฐ๋ฅผ ์์ฑํ๋ฉด ๋ฒ์ ํธ๋ฆฌ ์ค์ผ์ด ๋ฐ์ํฉ๋๋ค. ๋ค์์ ๋ค์๊ณผ ๊ฐ์ ๋ฒ์ ํธ๋ฆฌ ๊ตฌ์กฐ๋ฅผ ์์ฑํ๋ ์ธ ๊ฐ์ ์ค์ฒฉ ๋ ์ง์๋ฌธ์ ํ ๋ฐ์ปค ์์ (http://plnkr.co/edit/DwukVGGprFFjQuVY8yTz)์ ๋๋ค.
< Scope (002) : ng-app
< Scope (003) : ng-controller
< Scope (004) : box
< Scope (005) : ng-transclude
< Scope (006) : box
< Scope (007) : ng-transclude
< Scope (008) : box
< Scope (009) : ng-transclude
์ด ๋์์ ๋ชฉ์ ์ ์๋ฌด๋ฐ ๊ฐ์น๋ฅผ ๋ถ์ฌํ์ง ์๋ ๊ฒ ๊ฐ์ง๋ง ์ด๋ณด์๋ค ์ฌ์ด์ ๋ง์ ํผ๋์ ์ผ๊ธฐํฉ๋๋ค.
์ง๊ธ์ ์ด์ ์์ ๊ฐ ์ํํ๋ ์์ ์ ์ ํํ ๋ฌ์ฑํ๋ ๋ค์ ํด๊ฒฐ ๋ฐฉ๋ฒ์ ์ฌ์ฉํฉ๋๋ค.
ui.directive('box', function() {
return {
restrict: 'E',
transclude: true,
template: '<div/>',
replace: true,
scope: {},
link: function(scope, element, attrs, transclude) {
transclude(scope.$parent, function(content) {
element.append(content);
});
}
};
});
๋ค์์์ด ๊ฐ๋ ์ ๋ณด์ฌ์ฃผ๋ ํ ๋ฐ์ปค ์์ (http://plnkr.co/edit/46v6IBLkhS71L1WbUDFl)์ ๋๋ค. ์ค์ฝํ ํธ๋ฆฌ๋ฅผ ๋ฉ์ง๊ณ ๊น๋ํ๊ฒ ์ ์งํฉ๋๋ค.
< Scope (002) : ng-app
< Scope (003) : ng-controller
< Scope (004) : box
< Scope (005) : box
< Scope (006) : box
๊ทธ๋ฆฌ๊ณ ์๋ฐฉํฅ ๋ฐ์ธ๋ฉ์ 'object.value'๊ฐ ์๋ 'value'๋ฅผ ๋ฐ์ธ๋ฉ ํ ๋ ๋ง์ ์ฌ๋๋ค์ด ๊ธฐ๋ํ๋ ๋ฐฉ์์ผ๋ก ์๋ํฉ๋๋ค. (์ ๋ '๊ฐ์น'๋ง ์ ๋ฌํ๋ ๊ฒ์ด ์ด๋ค ๊ฒฝ์ฐ์๋ ํจ๊ณผ๊ฐ ์์ง๋ง ๋ค๋ฅธ ๊ฒฝ์ฐ์๋ ํจ๊ณผ๊ฐ ์๋ค๋ ์ฌ์ค๊ณผ ์๋ฐ ์คํฌ๋ฆฝํธ์์ ํ๋กํ ํ์ ์์์ ๋ณธ์ง์ ๋น๋ํ๋ ๊ฒ์ ์ข์ ๋ณ๋ช ์ด ์๋๋ผ๊ณ ์๊ฐํฉ๋๋ค. ๋ง์ ์ฌ๋๋ค์ด์ด ๋์์ด ์์์น ๋ชปํ ํ๋์ด๋ผ๊ณ ์๊ฐํ๋ค๋ ์ฌ์ค์ ์ํคํ ์ฒ ๊ฒฐํจ์ด ์์์ ๋ํ๋ ๋๋ค. .)
๋ค๋ฅธ ์ฌ๋๋ค์ ์๊ฐ๊ณผ ng-transclude์ ๋ํ ์๋ก์ด ํ์ ๋ฒ์๋ฅผ ๋ง๋๋ ๊ฒ์ด ํฉ๋ฆฌ์ ์ด๋ผ๊ณ ์๊ฐํ๋ ์ฌ์ฉ ์ฌ๋ก๋ฅผ ๋ฃ๊ณ ์ถ์ต๋๋ค.
Transclude๋ ์ด๋์์ ์ ๋ฒ์๋ฅผ ์์ฑํฉ๋๊น? http://plnkr.co/edit/EuHaBR26JgAegQKvwOGH?p=preview ๋ณด์ด์ง ์์ต๋๋ค
ng-transclude ์ง์๋ฌธ์ ๋ํด ์ด์ผ๊ธฐํ๊ณ ์์ต๋๋ค. ๊ทํ์ ์์์ ๋น์ ์ด ๊ฐ์ง ๊ฒ์ ์ ํํ ๋ด ์์ ์ด ์ํํ๋ ๊ฒ์ ๋๋ค.
์ด๊ฒ์ ์ ํจํ ์์ฒญ์ ๋๋ค. ์ฐ๋ฆฌ๋ ์ด๊ฒ์ 1.2์ ๋ํด ๊ณ ๋ คํ๊ณ ์์์ง๋ง ์ต์ข ๋ฆด๋ฆฌ์ค์ ๊ฐ๊น์์ง๊ณ ์์๊ณ ์ด ์ฃผ์ ๋ณ๊ฒฝ ์ฌํญ์ ๋์ ํ๊ณ ์ถ์ง ์์์ต๋๋ค.
1.3์ ๋ํด ๊ณ ๋ คํด์ผํฉ๋๋ค.
์ ํ์ด! ๋๋ ๋น์ ์ด ์ด๋ฏธ ๊ทธ๊ฒ์ ๊ณ ๋ คํ๊ณ ์๋ค๋ ๊ฒ์ด ๊ธฐ์ฉ๋๋ค.
์ด๊ฒ์ ๋ํ +1. ๋ด ๋ฌธ์ ๋ ์ด๊ฒ๊ณผ ๊ด๋ จ์ด ์๋ค๊ณ ์๊ฐํฉ๋๋ค : ์์์ด์๋ ์ง์๋ฌธ์์ ng-transclude๋ฅผ ์ฌ์ฉํ๊ณ ์์ ์ ํจ์ฑ ๊ฒ์ฌ ๊ฐ์ฒด์ ์ก์ธ์คํ๊ธฐ ์ํด scope. $$ childHead๋ฅผ ํต๊ณผํด์ผํ์ง๋ง ๋ชจ๋ธ์ ์ก์ธ์คํ๋ ๋ฐ ๋ฌธ์ ๊ฐ ์์ต๋๋ค.
์ค๋์ด ๋ฌธ์ ์ +1ํ๊ณ ์์ผ๋ฉฐ $parent
๋ชจ๋ ๊ณณ์ ๋์ง๋ ๊ฒ์ ์ซ์ดํฉ๋๋ค.
๋ฐ๋ผ์ ์ด์ ๋ํ ํด๊ฒฐ์ฑ ์ ์ฐพ๊ธฐ ์ํด์๋ ๋ ๊ฐ์ง ๊ฐ๋ฅ์ฑ์ด์๋ ๊ฒ ๊ฐ์ต๋๋ค.
1) ngTransclude ์ง์๋ฌธ์ ๋ณ๊ฒฝํ์ฌ ๋ฒ์๋ฅผ ์ง์ ํ์ญ์์ค (์ค์ ๋ก ์ด๊ฒ๋ณด๋ค ํจ์ฌ ๋ ๋ง์ด ์ถ์ ๋ ์ ์์ต๋๋ค .--- ์ปจํธ๋กค๋ฌ๊ฐ ํ์ํ์ง ์์ต๋๋ค)
๋๋
2) ๋ฒ์๊ฐ ์ง์ ๋์ง ์์ ๊ฒฝ์ฐ ์ ๋ฒ์๋ฅผ ๋ง๋ค์ง ๋ง์ญ์์ค.
๋ฐ๋ผ์ ์ต์ 1)์ ์ฌ์ฉํ์ฌ ๋ช ๋ฐ์ดํธ๋ฅผ ์ ์ฝ ํ ์ ์์ผ๋ฉฐ ์ข์ต๋๋ค. 2) ๊ฐ์ฅ ์์ ์๋ฃจ์ (3 ์ค ์ญ์ ์ ๋)์ด ๋ ์ ์์ผ๋ฉฐ ์ ๋ฒ์๋ฅผ ๋ง๋๋ ๊ฒ์ด ์์ ์ ์ผ๋ก ์๋ฏธ๊ฐ์๋ ์ฌ์ฉ ์ฌ๋ก๊ฐ ์๋ค๋ ๊ฒ์ด ๋ถ๋ช ํ์ง ์์ต๋๋ค ( ์์ ์ ์์ง๋ง ๋ฌธ์์์ ์ด์์ด ์ค๋ช ๋๋ ๋ฐฉ์๊ณผ ์์ ํ ๋ฐ๋๋๋ ๊ฒ ๊ฐ์ต๋๋ค.)
๋๋ ๋งค์ฐ ๋ฉ์ง๊ฒ ๋ง๋ค๊ณ ์ถ๋ค๋ฉด ngTransclude๊ฐ ์์ฑ ๊ฐ์ ํตํด ์ ๋ฒ์๋ฅผ ์ํ ์ง ์ฌ๋ถ๋ฅผ ์ง์ ํ๋๋ก ํ์ฉํ์ฌ ๋ณ๊ฒฝ ์ฌํญ์ ์์ ํ ์ค๋จํ์ง ์์ ์ ์์ต๋๋ค.
์๊ฐ?
๋๋ ๋น์ ์ 1๊ณผ 2์ ์ฐจ์ด๋ฅผ ์ดํดํ์ง ๋ชปํฉ๋๋ค!
๋ด ์๊ฒฌ ์ผ ๋ฟ์ด์ง ๋ง์ด ๋ณ๊ฒฝ์๋ ํ์ ํธํ์ฑ์ด ์ค์ ํ ๊ฒ์ด๋ผ๊ณ ์๊ฐํฉ๋๋ค. $ parent ๋ฐ scope. $$ childHead์ ๊ฐ์ ๊ฒ์ ์ฌ์ฉ ํ์ฌ์ด ๋ฒ์ ๋ฌธ์ ๋ฅผ ํด๊ฒฐ ํ ๋ง์ ์ฑ์ด ์๋ค๊ณ ์๊ฐํฉ๋๋ค. ์ด ๋์์ ๋ณ๊ฒฝํ๋ ๋ชจ๋ ์ ๋ฐ์ดํธ๋ ์ฝ๊ฐ์ ๋ํต์ ์ ๋ฐํ ๊ฒ์ ๋๋ค (ํ์ง๋ง ๋์ค์ ๋ํต์ ์ผ์ผํค๋ ๊ฒ์ด ๋ ๋ซ์ต๋๋ค).
์ฆ, ์ด๋ก ์ ๊ด์ ์์ ng-tranclude๊ฐ ๊ธฐ๋ณธ์ ์ผ๋ก ์ง์๋ฌธ๊ณผ ๋์ผํ ๋ฒ์๋ฅผ ๊ฐ๋ ๊ฒ์ด ๋ ํฉ๋ฆฌ์ ์ด๋ผ๊ณ ์๊ฐํฉ๋๋ค. ์ฝํ ์ธ ๋ฅผ ๋ฐฐ์ ํ๋ ์์ ์ ์ฝํ ์ธ ์ ์ํํ ๋ถ๋ถ์ ์ํ๋ค๋ ๊ฒ์ ๋๋ค. transcludes๊ฐ์๋ ์ง์๋ฌธ์ ์ค์ฒฉ์ด ๋ง์ง๋ง ์ฌ์ ํ ํ๋์ ํฐ ๊ตฌ์ฑ ์์๋ก ๋์ํ๊ธฐ๋ฅผ ์ํ ๋๊ฐ ์์ต๋๋ค. ์ค์ฝํ๊ฐ ๋ชจ๋ ๋ค๋ฅด๋ฉด ๋งค์ฐ ๊น๋ค ๋กญ์ต๋๋ค.
๋ด ์๊ฐ๋ฟ์ ๋๋ค. ์ต์ํ ์ต์ ์ ๊ฐ๋ ๊ฒ์ ํ์ฌ ์ํฉ๋ณด๋ค ํ ๋จ๊ณ ์ ๋จ๊ณ๊ฐ ๋ ๊ฒ์ ๋๋ค. :)
@troch ๋ฅผ ๋ช ํํํ๊ธฐ ์ํด ngTranscludeDirective์ ์ปจํธ๋กค๋ฌ์ ๋ค์์ ์ฝ์ ํฉ๋๋ค.
// This is the function that is injected as `$transclude`.
function controllersBoundTransclude(scope, cloneAttachFn) {
var transcludeControllers;
// no scope passed
if (arguments.length < 2) {
cloneAttachFn = scope;
scope = undefined;
}
if (hasElementTranscludeDirective) {
transcludeControllers = elementControllers;
}
return boundTranscludeFn(scope, cloneAttachFn, transcludeControllers);
}
์ง์๋ฌธ์ ๋ฒ์์์ด์ด ํจ์๋ฅผ ํธ์ถํ๋ฏ๋ก ๋ฒ์๊ฐ ์ ์๋์ง ์์ต๋๋ค ... ๊ทธ๋ฐ ๋ค์ boundTranscludeFn
์์ transcludeScope๊ฐ ๊ฑฐ์ง์ด๋ฉด ์ ๋ฒ์๋ฅผ ๋ง๋ญ๋๋ค ...
๊ทธ๋์ ์ ๊ฐ ๋งํ๊ณ ์๋ ๊ฒ์ 1์ ๋ํด, transclude ํจ์์ ํ์ฌ ๋ฒ์๋ฅผ ๊ฐ๋จํ ์ง์ ํ ์ ์์ต๋๋ค (์ด ์ง์๋ฌธ์ ๋ถ๋ฆฌ ๋ฒ์๋ฅผ ๊ฐ์ง ์์๋ ๋ชจ๋ ๊ฒ์ ์ธ์ ์ง์๋ฌธ์ด๋ฏ๋ก ์ฌ์ ํ ์๋ ๋ฒ์๋ฅผ ์ ๊ณตํด์ผํฉ๋๋ค). .
๋๋ 2), ์ ๋ฒ์๋ฅผ ๋ง๋ค์ง ๋ง๊ณ ํ์ฌ ๋ฒ์ (createBoundTranscludeFn์์)๋ก ๊ธฐ๋ณธ ์ค์ ํฉ๋๋ค (์ ์ฌ์ ์ผ๋ก ๋ณ๊ฒฝ ์ฌํญ์ ์ค๋จํ๊ณ ์ ์ฌ์ ์ผ๋ก ๋ง์ ํ ์คํธ๋ฅผ ์ค๋จ ํจ).
๋ ๋ค ๋งค์ฐ ๊ฐ๋จํฉ๋๋ค.
+1
+1
+1
ํ์คํ +1
+1
+1
+1
+1 ๋ถํํฉ๋๋ค
๋น์ ์ ๊ฝค ๋ฉ์ง ๊ฒ์ด ๋ฌด์์ธ์ง ์๊ณ ์์ต๋๋ค. ๋น๋ก 1.3 ์๊ฐ์ ์์ ํ ๊ฐ๋ฅํ์ง๋ ์์ง๋ง ES6 ํ๋ก์ ๋ transclusion์ ์ ๋ง ๋ฉ์ง๊ฒ ๋ง๋ค ์ ์์ต๋๋ค.
ํ๋ก์ ๊ตฌํ์ ์ฌ์ฉํ ์์๋ ๊ฒฝ์ฐ์๋ ์๋ง๋ scope. $ new ()๋ก ๋์ฒด ํ ์ ์์ผ๋ฏ๋ก ์ค์ ๋ก์ด ์์ ์ ์๋นํ ์ผ์ฐ ์ํ ํ ์ ์์ต๋๋ค. ๊น๋ค๋ก์ด ๊ฒ์ ์ฌ์์ด ์ฝ๊ฐ ํ๋ค๋ฆฐ๋ค๋ ๊ฒ์ ๋๋ค.
๋ฐ๋ผ์ ๋ฒ์ ๊ณ์ธต ๊ตฌ์กฐ๋ฅผ ๋งค์ฐ ๊น๋ํ๊ฒ ์ ์งํ๋ ค๋ฉด ์์น ์๋ ๋ฒ์๊ฐ ๊ณ์ ๋ฐ์ํ์ง๋ง ์ต์ํ ๋ฐ์ดํฐ ๋ฐ์ธ๋ฉ์ด ์๊ธฐ์น ์๊ฒ ์ค๋จ๋์ง ์๋ ๋ถ์์ฉ์ด์์ ์ ์์ต๋๋ค. ๋ชฐ๋ผ์.
+1
+1
+1
+1
+1
๋ฉ๋ฉ
๋๋ ๋งค์ฐ ๋ฉ์ง๊ฒ ๋ง๋ค๊ณ ์ถ๋ค๋ฉด ngTransclude๊ฐ ์์ฑ ๊ฐ์ ํตํด ์ ๋ฒ์๋ฅผ ์ํ ์ง ์ฌ๋ถ๋ฅผ ์ง์ ํ๋๋ก ํ์ฉํ์ฌ ๋ณ๊ฒฝ ์ฌํญ์ ์์ ํ ์ค๋จํ์ง ์์ ์ ์์ต๋๋ค.
์ฃผ์ ๋ณ๊ฒฝ ์ฌํญ์ด์๋ ๊ฒ์ ๋ฌด์์ด๋ ๋ด ํฌํ๋ฅผ๋ฐ์ต๋๋ค.
+1
+1
+1
+1
+1
+1. ๋๋ ํญ์์ด ํ๋์ ๋ํด ๊ถ๊ธํดํ๋ค. ๋๋ caitp ์์ด ์๋ฃจ์ ์ ์ข์ํฉ๋๋ค.
๋ฉ๋ฉ
๋๋ ๋งค์ฐ ๋ฉ์ง๊ฒ ๋ง๋ค๊ณ ์ถ๋ค๋ฉด> ngTransclude๊ฐ ์์ฑ ๊ฐ์ ํตํด ์ ๋ฒ์๋ฅผ ์ํ๋์ง ์ฌ๋ถ๋ฅผ ์ง์ ํ๋๋ก ํ์ฉํ์ฌ ๋ณ๊ฒฝ ์ฌํญ์ ์์ ํ ์ค๋จํ์ง ์์ ์ ์์ต๋๋ค.
+1
+1
+1
์ด ๋ฌธ์ ๋ฅผ๋ณด๊ณ ์๋ ์ฌ๋๋ค์ ์ํด '๊ฐ์ ๋'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;
}
}
}
})
์์ # 8609์์ ์ ๊ธฐ ํ ๋ฌธ์ ๊ฐ์ด ์ค๋ ๋์ ์ค๋ณต์ผ๋ก ์ข ๊ฒฐ๋์์ผ๋ฏ๋ก ์ฌ๊ธฐ์ ๋ค์ ์ค๋ช ํ๊ฒ ์ต๋๋ค.
์ ์๊ฐ์ DOM์ ์ธ๋ฉด ๋ ๋ถ๋ถ์ ๋ํด ๋ฒ์๊ฐ ์์ฑ๋๋ ํ์ฌ ๋ฐฉ์์ ๋งค์ฐ ๋น๋
ผ๋ฆฌ์ ์
๋๋ค!
๊ฐ๋์ ์ ์์ ์ธ ํ๋ฆ์ ์ด๊ธ๋๋ฏ๋ก ๊ณ ์ ํด์ผํฉ๋๋ค!
๋ค์์ ์ด์ ๋ฌธ์ ์ ๋ฐ์ท ๋ณธ์ ๋๋ค.
์ฌ๊ธฐ์ ๋ด ๋ฌธ์ ๋ฅผ ์ค๋ช ํ๊ธฐ ์ํด ์์ ๋ฉ์ด๋ฆฌ ๋ฅผ ๋ง๋ค์์ต๋๋ค.
์ฃผ์ ๋ฒ์ฃ์๋์ด ์ง์นจ์ ์์ต๋๋ค.
function pane() {
return {
restrict: 'E',
transclude: true,
scope: {
title: '@'
},
template: '<div style="border: 1px solid black;">' +
'<div style="background-color: gray">{{title}} (isolate scope id: {{$id}})</div>' +
'<ng-transclude></ng-transclude>' +
'</div>'
};
}
์ฌ์ฉ์๊ฐ ๋ค์๊ณผ ๊ฐ์ด ํ ๋ :
<form>
<pane title='enter your name'>
<input type='text ngModel='username'>
</pane>
<pane title='enter your token'>
<input type='text ngModel='token'>
</pane>
๊ทธ ๊ฒฐ๊ณผ๋ ํนํ ์ ๊ท ์ฌ์ฉ์์๊ฒ ๋๋ผ ์ธ ๊ฒ์
๋๋ค. ๊ทธ๋ฆฌ๊ณ ์ด๊ฒ์ (๊ณผ๋ํ๊ฒ) ๋จ์ํ ๋ ์ฌ์ฉ ์ฌ๋ก์
๋๋ค. ๊ฑฐ๊ธฐ์ ๋ช ๊ฐ์ง ์ ํจ์ฑ ๊ฒ์ฌ ๋ฉ์์ง๋ฅผ ํ์ํ์ญ์์ค.)
์ด๊ฒ์์ด ๋ฌธ์ ๊ฐ ์์๋ ๊ณณ๊ณผ ๋ค๋ฅธ ์ฌ์ฉ ์ฌ๋ก์ด์ง๋ง ๊ธฐ๋ณธ์ ์ผ๋ก ๋์ผํ ๋ฌธ์ ๋ผ๋ ๋ฐ ๋์ํฉ๋๋ค!
dom ์์๋ก ๋ฒ์๋ฅผ ๋์ ํ๋ ๊ฒ์ด ๋ ํฉ๋ฆฌ์ ์
๋๋ค. ์ ๋ฒ์๊ฐ ์ ๋ง๋ก ํ์ํ ๊ฒฝ์ฐ ์ฌ์ฉ์๋ ngTransclude
์์์ ngController
๋ฅผ ๋ฃ์ ์ ์์ต๋๋ค. ๋๋ ngTransclude
์ ํ๋๊ทธ๋ฅผ ํธ๋ฆฌ๊ฑฐํ๋ ์ ํ์ ํ๋๊ทธ๊ฐ์์ ์ ์์ต๋๋ค. ์ด ํ๋๊ทธ๋ # 5489 ์ฌ์ฉ ์ฌ๋ก๋ฅผ ํด๊ฒฐํ๋๋ฐ๋ ์ฌ์ฉํ ์ ์์ต๋๋ค. ๋ํ ์ ๊ณต๋๋ ์๋ฃจ์
caitp์๋ ์ฌ์ฉํ ์ ์์ต๋๋ค.
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1์ํ์ง ๋ง๋ผ๊ณ ์์ฒญ์ ๋ฐ์์ ๋์๋ ๋ฒ์๋ฅผ ์์ฑํ๋ ๊ฒ์ผ๋ก ๋ณด์ ๋๋ค. ์ http://plnkr.co/edit/Wn81IBkE87vtigXvjmIa?p=preview
+1
+1
+1
+1
+1
+1
+1
+1
+1-์ด์ ๋ํ ์ ํจํ ํด๊ฒฐ ๋ฐฉ๋ฒ์ด ์์ต๋๊น?
@nikkwong ,์ด ์ค๋ ๋์ ๊ฒ์ ๋ ๋ช ๊ฐ์ง ํด๊ฒฐ ๋ฐฉ๋ฒ์ด ์์ต๋๋ค. ํด๊ฒฐ ๋ฐฉ๋ฒ์ ๋ณด์ฌ์ฃผ๋ ํ๋ ํฌ ์์ ๋งํฌ๋ฅผ ์ํํ์์ ์๊ณ ์์ต๋๋ค.
์ข์ต๋๋ค. ์ด๊ฒ์ด ๋์ฐฉํ๋๋ผ๋ 1.5.x๊น์ง๋ ์๋๋๋ค.
ํ์ง๋ง ๊ทธ ์ ์ ๊ฑฑ์ ์ด ์์ต๋๋ค. ์ ๋ฒ์๋ฅผ ๋ง๋๋ ์ฃผ๋ ์ด์ (๊ฒฉ๋ฆฌ ๋ฒ์์ ํ์ ๋๋ ๋ ์ ํํ๊ฒ๋ ์ ์ธ ๋ ์ฝํ ์ธ ๊ฐ ๋์ค๋ ์๋ ๋ฒ์์ ์์์ด๋ผ๊ณ ํจ)๋ ๋ฉ๋ชจ๋ฆฌ ๋์๋ฅผ ๋ฐฉ์งํ๊ธฐ์ํ ๊ฒ์ ๋๋ค.
์ด ํ ๋ฐ์ปค๋ฅผ ๋น๊ตํ์ญ์์ค.
http://plnkr.co/edit/3NVxdYGy1AFDvD0M2BYI?p=preview
์๋ transclusion์ด ์จ ๊ณณ์์ ๋ฒ์๋ฅผ ์ฌ์ฌ์ฉํ๋ ๋ฒ์ ์ผ๋ก :
http://plnkr.co/edit/MXFz2awcqwQQ7R882Xwz?p=preview
๋ ๋ฒ์งธ ๋ฒ์ ์์๋ ํธ๋์ค ํด๋ฃจ ๋ ๋ ์ฝํ ์ธ ๋ฅผ ์ผ๊ณ ๋ ๋ ๊ฐ์์ ์๊ฐ ๊ณ์ ์ฆ๊ฐํฉ๋๋ค. ๋ฉ๋ชจ๋ฆฌ ๋์๊ฐ ๋ฐ์ํฉ๋๋ค.
@petebacondarwin ํ์คํ ์๋ก์ด ๋ฒ์ ์ฌ์ผํ๋ฏ๋ก ๊ฐ์์์ ํจ๊ป ํ๊ดด ๋ ์ ์์ต๋๋ค. transclusion์ ๋ํ ๋๋ถ๋ถ์ ์ฌํ์ ng-transclude๊ฐ ํฌํจํ๋ ๋ฒ์์ ํ์ ๋ฒ์๋ฅผ ์์ฑํ์ฌ ํ๋กํ ํ์ ์์์ ํตํด ๋ณ์์ ์ก์ธ์ค ํ ์ ์๊ธฐ ๋๋ฌธ์ด๋ผ๊ณ ์๊ฐํฉ๋๋ค. ์๋๋ฉด ๋ด๊ฐ ํ๋ ธ๋ ์?
์ฐ๋ฆฌ๋ ๋ฌธ์ ๊ฐ ์ต๊ทค๋ฌ 2 ์จ์ด ๋ฐ์ธ๋ฉ์ด ์๋ํ๋ ๋ฐฉ์์ด๋ผ๋ ๊ฒ์ ๋ค์๊ธ ๊นจ๋ฌ์์ต๋๋ค. ํ์คํ ng-transclude๋ ์์ ๋ฒ์๋ฅผ ์์ฑํ์ง๋ง ng-repeat๋ ์์ ๋ฒ์๋ฅผ ๋ง๋๋ ๊ฒ๊ณผ ๊ฐ์ด ๋์ผํ ์ํฉ์์ ์์ ์ ์ฐพ์ ์์๋ ์๋ง์ ๊ฒฝ์ฐ๊ฐ์์ ๊ฒ์ ๋๋ค. ๊ฐ๋ ์ฝ๋๋ฅผ ์ดํด๋ณธ ๊ฒฐ๊ณผ ์๋ฐฉํฅ ๋ฐ์ธ๋ฉ ๋ฌธ์ ๋ ๊ฐ์ฒด ์์ฑ์ผ๋ก๋ ์๋ํ์ง ์์ง๋ง ๊ฐ์ฒด ์์ฒด์์๋ ์ ์๋ํ๋ค๋ ๊ฒ์ ๊นจ๋ฌ์์ต๋๋ค.
๋ฌธ์ : http://plnkr.co/edit/Wn81IBkE87vtigXvjmIa?p=preview
์๋ฃจ์ : http://plnkr.co/edit/KShClgQVwIjscXPzVRwR?p=preview
์๋ฒฝํ์ง๋ ์์ง๋ง ์ด๊ฒ์ ์๋ ๊ฒ์ ๋ง์ ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ์ผ๋ฉฐ ์์ฑ์ ๋ํด ์๋ฐฉํฅ ๋ฐ์ธ๋ฉ์ ์ํํ์ง ๋ง์ญ์์ค.
์ด ์๋ฃจ์ ์ ์ด๋ฏธ mbykovskyy์ ์ํด ์ ์๋์์ต๋๋ค. ๊ทธ๊ฐ ๋ฌธ์ ๋ฅผ ์ ๊ธฐํ์ ๋ ๋๋ ๊ทธ๊ฒ์ ์์๋ด๋ ๋ฐ ์๊ฐ์ด ๊ฑธ๋ฆฌ๊ธฐ ๋๋ฌธ์ ์์ ๋ฅผ ์ ๊ณตํ๊ณ ์์ต๋๋ค.
@petebacondarwin ๋ณด์ ๋ฒ์๊ฐ ํ๊ดด ๋ ๋๊น์ง ์ผ์์ ์ธ ๋์ถ ์ผ๋ฟ์
๋๋ค. ์ฌ๊ธฐ์ (a plunk) [http://plnkr.co/edit/Q587WQnX0u0u7JjhtCxa?p=preview]๋ transclude-holding-scope๋ฅผ ์ ํํ๋ฉด ๋ชจ๋ ๊ฒ์ด ์ ์์ ์ผ๋ก ํด์ ๋๋ค๋ ๊ฒ์ ๋ณด์ฌ์ค๋๋ค.
๊ทธ๋๋์ฃผ์๊ฐ ํ์ํ ๋ถ๋ถ์
๋๋ค. ์๋ง๋์ด ๊ฐ๋ฅํ ๋์ถ์ ๋ํ ๋ฌธ์์ ํฐ Waring์ด ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๊ธฐ์ ์ถฉ๋ถํ ์ ์์ต๋๊น?
๋ชจ๋ JS ๋์ถ์ ๋ธ๋ผ์ฐ์ ๋ฅผ ์๋ก ๊ณ ์น ๋๊น์ง ์ผ์์ ์ธ ๊ฒ์
๋๋ค ;-)
2015 ๋
9 ์ 8 ์ผ 16:41, "Sander Elias" [email protected] ์ ๋ค์๊ณผ ๊ฐ์ด ์ผ์ต๋๋ค.
@petebacondarwin https://github.com/petebacondarwin
๋ณด์ ๋ฒ์๊ฐ ํ๊ดด ๋ ๋๊น์ง ์ผ์์ ์ธ ๋์ถ. ์ฌ๊ธฐ (a
plunk) [http://plnkr.co/edit/Q587WQnX0u0u7JjhtCxa?p=preview]
transclude-holding-scope๋ฅผ ์ ํํ๋ฉด ๋ชจ๋ ๊ฒ์ด
์ ์ถ์๋์์ต๋๋ค.
๊ทธ๋๋์ฃผ์๊ฐ ํ์ํ ๋ถ๋ถ์ ๋๋ค. ์๋ง๋ ํฐ Waring
์ด ๊ฐ๋ฅํ ๋์ถ์ ๋ํ ๋ฌธ์๊ฐ ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๊ธฐ์ ์ถฉ๋ถํ ๊น์?โ
์ด ์ด๋ฉ์ผ์ ์ง์ ๋ต์ฅํ๊ฑฐ๋ GitHub์์ ํ์ธํ์ธ์.
https://github.com/angular/angular.js/issues/5489#issuecomment -138603298
.
@SanderElias Angular ์ ํ๋ฆฌ์ผ์ด์
์ฌ์ฉ์๋ ํ๋ฃจ์ ์์๋ถํฐ ๋๊น์ง ๋ฐ์๋ค.
์ฐ๋ฆฌ๋ ์ด๋ฏธ ๋ฎ ๋์ ๋ฉ๋ชจ๋ฆฌ ์ฌ์ฉ๋์ด ์ฆ๊ฐํ๊ณ ์์์ ์๊ณ ์์ผ๋ฉฐ ํ์ด์ง์ ๋ฌด์์ ์ฌ๋ฆด ์ง ๋งค์ฐ์ฃผ์ํด์ผํฉ๋๋ค. ๋ ๋ง์ ๋์ถ ๊ฐ๋ฅ์ฑ์ ๋์
ํ๋ ๊ฒ์ ์ํํฉ๋๋ค.
@troch -transclusion์ ์ค์ ๋ก transcluded ์ฝํ ์ธ ๊ฐ ์๋ ๋ฐ๊ฒฌ ๋ ๋ฒ์์ ํ์ ๋ฒ์๋ฅผ ๋ง๋ญ๋๋ค. ์ด๊ฒ์ ๋ช ๊ฐ์ง ๋ฒ์ ์ผ๋ก ๋์๊ฐ์ (ํ์คํ 1.2์์) ํ์ฌ ์ง์๋ฌธ ๋ฒ์์ ๋ถ๋ชจ์ ์์์ ์์ฑํ์ต๋๋ค. ์ด๊ฒ์ ๊น์ด ์ค์ฒฉ ๋ transclusion์ด ์ค์ ๋ก ์๋ชป๋ transclusion ๋ฒ์๋ฅผ ๊ฐ์ง๊ณ ์์์ ์๋ฏธํฉ๋๋ค.
@petebacondarwin ์ ๋์ํด์ผํ๋ฉฐ ํ์ฌ ๋์์ด 100 % ์ง๊ด์ ์ด์ง ์์ ๊ฒฝ์ฐ์๋ ํ์ฌ ๋์์ด ๋์ถ์ ๋ฐฉ์งํ๊ธฐ ์ํด ๊ฐ์ฅ ์ ์๋ํฉ๋๋ค. ์ด ๋ฌธ์ ๋ฅผ Wont Fix๋ก ์ข ๋ฃํ๊ณ ์ถ์ต๋๋ค.
๋ช ๋ ์ ์ Ember๋ก ์ ํ ํ ๊ฒ์ ๋คํ์ ๋๋ค. :)
๊ฐ์ฅ ์ ์ฉํ ๋๊ธ
๋ช ๋ ์ ์ Ember๋ก ์ ํ ํ ๊ฒ์ ๋คํ์ ๋๋ค. :)