Angular.js: angular 1.2.18: transcludeλ₯Ό μ‚¬μš©ν•œ ng-repeat 문제

에 λ§Œλ“  2014λ…„ 06μ›” 17일  Β·  48μ½”λ©˜νŠΈ  Β·  좜처: angular/angular.js

ng-transclude둜 μ§€μ‹œλ¬Έμ— 전달할 λ•Œ λ°˜λ³΅ν•˜λ €λŠ” μ°Έμ‘° {{item}}κ°€ μžˆλŠ” html μ½˜ν…μΈ (μ§€μ‹œμ–΄μ— κ΅¬ν˜„λœ ng-repeat="item in collection"을 톡해)λŠ” 버전 1.2.18μ—μ„œ μž‘λ™ν•˜μ§€ μ•ŠμŠ΅λ‹ˆλ‹€.

http://embed.plnkr.co/EvzF25sPD3uZLQivDFqy/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>

λͺ¨λ“  48 λŒ“κΈ€

였 법사. @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 μƒμœ„ λ²”μœ„κ°€ μ§€μ‹œλ¬Έ λ²”μœ„κ°€ μ•„λ‹™λ‹ˆλ‹€.

http://plnkr.co/edit/7j92IC?p=preview

@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 : 두 가지 μΆ”κ°€ 정보λ₯Ό 얻을 수 μžˆλ‹€λ©΄ 맀우 도움이 될 κ²ƒμž…λ‹ˆλ‹€.

  1. "버전 1.2.0"(Caitlin이 λ§ν•œ λŒ€λ‘œ) μ–΄λ”˜κ°€μ—μ„œ λ°œμƒν•œ μ–΄λ–€ μ£Όμš” λ³€κ²½ 사항이 이 μ ‘κ·Ό 방식을 κ°‘μžκΈ° ν­λ°œμ‹œμΌ°μŠ΅λ‹ˆκΉŒ? 더 이상 μž‘λ™ν•˜μ§€ μ•ŠλŠ” 것은 μ΄ν•΄ν•˜μ§€λ§Œ ν•΄λ‹Ή 릴리슀 근처의 λ³€κ²½ λ‘œκ·Έμ—μ„œ 이 νŠΉμ • λ¬Έμ œμ™€ 상관관계가 μžˆλŠ” κ²ƒμœΌλ‘œ λ³΄μ΄λŠ” νŠΉμ • ν•­λͺ©μ„ λ³Ό 수 μ—†μŠ΅λ‹ˆλ‹€.
  2. μž„μ˜μ˜ λ‚΄λΆ€ μ½˜ν…μΈ κ°€ 상속될 수 μžˆλŠ” 격리되고 μž¬μ‚¬μš© κ°€λŠ₯ν•œ μ»¨ν…Œμ΄λ„ˆλ₯Ό μ›ν•˜λŠ” 경우 μ΅œμ’… μ‚¬μš©μžκ°€ ng-transclude λŒ€μ‹  μ‚¬μš©ν•΄μ•Ό ν•˜λŠ” λŒ€μ²΄ μ ‘κ·Ό 방식은 λ¬΄μ—‡μž…λ‹ˆκΉŒ? 예: μΈν„°νŽ˜μ΄μŠ€μ‘°μ°¨ 가변적이고 μ™„μ „νžˆ 데이터 기반인 λŒ€κ·œλͺ¨ 닀쀑 ν…Œλ„ŒνŠΈ μ• ν”Œλ¦¬μΌ€μ΄μ…˜. λ”°λΌμ„œ 데이터λ₯Ό κ²€μƒ‰ν•˜μ—¬ 슀슀둜 μ±„μš΄ λ‹€μŒ μΌκ΄€λœ μƒν˜Έ μž‘μš©/λ™μž‘μ„ κ°€μ Έμ•Ό ν•˜λŠ” λͺ©λ‘ 컨트둀과 같은 ν•­λͺ©μ΄ μžˆμŠ΅λ‹ˆλ‹€. μš°λ¦¬λŠ” κ·ΈλŸ¬ν•œ 것듀을 μ œκ³΅ν•˜λŠ” 래퍼 μ§€μ‹œλ¬Έμ„ ν‘œμ€€ν™”ν•  수 있기λ₯Ό μ›ν•©λ‹ˆλ‹€. κ·ΈλŸ¬λ‚˜ λͺ©λ‘ ν•­λͺ©(λ‚΄λΆ€ μ§€μ‹œλ¬Έμ„ 포함할 수 있음)에 μ‚¬μš©ν•˜λŠ” ν…œν”Œλ¦Ώμ€ 상황에 따라 λ‹€λ¦…λ‹ˆλ‹€. 그리고 λͺ©λ‘μ€ λͺ©λ‘μ„ μƒμ„±ν•˜λŠ” λ°μ΄ν„°μ˜ 트리 ꡬ쑰λ₯Ό 기반으둜 반볡적으둜 μ€‘μ²©λ˜λŠ” κ²½μš°κ°€ λ§ŽμŠ΅λ‹ˆλ‹€. λ”°λΌμ„œ μ΄λŸ¬ν•œ 쀑첩 λͺ©λ‘μ— λŒ€ν•œ 격리가 ν•„μš”ν•©λ‹ˆλ‹€. μš°λ¦¬λŠ” λͺ¨λ“  μ½”λ“œλ₯Ό μ œμ–΄ν•˜λ―€λ‘œ 내뢀와 μ™ΈλΆ€λ₯Ό λΆ„λ¦¬ν•˜κΈ° μœ„ν•΄ transclusion을 μ‚¬μš©ν•˜μ§€ μ•ŠμŠ΅λ‹ˆλ‹€. 였히렀 μš°λ¦¬λŠ” 지침 κ°€μ΄λ“œμ—μ„œ λͺ…μ‹œμ μœΌλ‘œ ꢌμž₯된 λŒ€λ‘œ μ»¨ν…Œμ΄λ„ˆ 및 μž„μ˜μ˜ μ½˜ν…μΈ μ— λŒ€ν•œ ν›Œλ₯­ν•˜κ³  선언적인 μ ‘κ·Ό 방식을 λ”°λ₯΄κ³  μžˆμŠ΅λ‹ˆλ‹€. 인라인 ν…œν”Œλ¦Ώμ—μ„œ λ©€μ–΄μ§€κ²Œ ν•˜μ—¬ κ΄€μš©μ μ΄μ§€ μ•Šκ²Œ λŠκ»΄μ§€λ”λΌλ„ ng-includeκ°€ μ§€κΈˆ 더 λ‚˜μ€ μ˜΅μ…˜(μ»¨ν…Œμ΄λ„ˆ μ„ μ–Έμ˜ μ†μ„±μœΌλ‘œ λ‚΄λΆ€ ν…œν”Œλ¦Ώ 경둜 전달)μž…λ‹ˆκΉŒ?

더 이상 μž‘λ™ν•˜μ§€ μ•ŠλŠ” 것은 μ΄ν•΄ν•˜μ§€λ§Œ ν•΄λ‹Ή 릴리슀 근처의 λ³€κ²½ λ‘œκ·Έμ—μ„œ 이 νŠΉμ • λ¬Έμ œμ™€ 상관관계가 μžˆλŠ” κ²ƒμœΌλ‘œ λ³΄μ΄λŠ” νŠΉμ • ν•­λͺ©μ„ λ³Ό 수 μ—†μŠ΅λ‹ˆλ‹€.

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 이후 μ€‘λ‹¨λœ 데λͺ¨μž…λ‹ˆλ‹€.

http://plnkr.co/edit/QswOxN?p=preview

@evgenyneu : λ‚΄λΆ€ μ½˜ν…μΈ μ™€ μ»¨ν…Œμ΄λ„ˆ μ§€μ‹œλ¬Έμ„ λͺ¨λ‘ μ œμ–΄ν•œλ‹€κ³  κ°€μ •ν•˜λ©΄

λ‚΄λΆ€ μ½˜ν…μΈ  ν…œν”Œλ¦Ώμ΄ λ·° ν…œν”Œλ¦Ώμ— μΈλΌμΈλ˜λ„λ‘ ν•˜λ €λ©΄ ng-template을 μ‚¬μš©ν•˜μ—¬ 이전에 μ‚¬μš©ν–ˆλ˜ 것과 λ™μΌν•œ μœ„μΉ˜μ— ν…œν”Œλ¦Ώμ„ λž˜ν•‘ν•˜λ©΄ λ©λ‹ˆλ‹€.

@xmlilley , ν›Œλ₯­ν•œ 팁, 정말 κ°μ‚¬ν•©λ‹ˆλ‹€. 그것은 μ‹€μ œλ‘œ κ°€μž₯ κΉ¨λ—ν•œ μ ‘κ·Ό λ°©μ‹μž…λ‹ˆλ‹€.

데λͺ¨λŠ” λ‹€μŒκ³Ό κ°™μŠ΅λ‹ˆλ‹€. http://plnkr.co/edit/4MwEL3?p=preview

μ—¬λŸ¬λΆ„μ΄ λŒ€μ‹  이것을 ν•  수 μžˆλ‹€λŠ” 것을 μ•Œκ³  μžˆμŠ΅λ‹ˆλ‹€. http://plnkr.co/edit/fw7thti1u4F9ArxsuYkQ?p=preview --- μ™„λ²½ν•˜μ§€λŠ” μ•Šμ§€λ§Œ 당신을 거기에 λ°λ €λ‹€μ€λ‹ˆλ‹€.

@caitp , κ°μ‚¬ν•©λ‹ˆλ‹€. μš°λ¦¬λŠ” λ§Žμ€ μ†”λ£¨μ…˜μ„ 가지고 μžˆμŠ΅λ‹ˆλ‹€!

이 문제λ₯Ό 보고 μžˆλŠ” μ‚¬λžŒλ“€μ„ μœ„ν•΄ 'ν–₯μƒλœ' ng-transclude μ§€μ‹œλ¬Έμ„ λ§Œλ“€μ—ˆμŠ΅λ‹ˆλ‹€. 속성 값은 μ°ΎλŠ” λ‚΄λΆ€ λ²”μœ„λ₯Ό μ •μ˜ν•˜κ³  λ‹€μŒ 3가지 쀑 ν•˜λ‚˜κ°€ 될 수 μžˆμŠ΅λ‹ˆλ‹€.

  • silbing - transclusion 이 λ°œμƒν•˜λŠ” μš”μ†Œμ˜ ν˜•μ œ λ²”μœ„μž…λ‹ˆλ‹€. 그것이 ν˜„μž¬μ˜ ng-transclude λ™μž‘μž…λ‹ˆλ‹€.
  • parent - νŠΈλžœμŠ€ν΄λ£¨λ“œ μ½˜ν…μΈ  λ²”μœ„λŠ” νŠΈλžœμŠ€ν΄λ£¨μ „μ΄ λ°œμƒν•˜λŠ” μš”μ†Œμ˜ λ²”μœ„μž…λ‹ˆλ‹€.
  • μžμ‹ - νŠΈλžœμŠ€ν΄λ£¨λ“œλœ μ½˜ν…μΈ  λ²”μœ„λŠ” νŠΈλžœμŠ€ν΄λ£¨μ „μ΄ λ°œμƒν•˜λŠ” μš”μ†Œ λ²”μœ„μ— λŒ€ν•œ μžμ‹ λ²”μœ„μž…λ‹ˆλ‹€.

μ‚¬μš© 예:

template: 
  '<div ng-transclude="parent">' +
  '</div>'

전체 예

λͺ¨λ“  예λ₯Ό 보렀면 이 plunk λ₯Ό μ°Έμ‘°ν•˜μ‹­μ‹œμ˜€.

좜λ ₯은 λ‹€μŒκ³Ό κ°™μŠ΅λ‹ˆλ‹€.

image

μ›μ²œ

.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

plunker_ng-transclude_ng-repeat

@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을 올렀 μ£Όμ‹œκ² μŠ΅λ‹ˆκΉŒ?

이 νŽ˜μ΄μ§€κ°€ 도움이 λ˜μ—ˆλ‚˜μš”?
0 / 5 - 0 λ“±κΈ‰