1

属性にテンプレートを渡し、それをコンパイルして後でレンダリングすると、式がコンパイルされていない を除いて、 $compile は正常に機能しますng-href="expression"

これはコンパイル機能で行われ、リンク機能では遅すぎますか?

ところで、テンプレート スコープをその親にリンクします。コントローラーのスコープである最も近いスコープを見つけるにはどうすればよいですか。

$parentすべてのケースでコントローラーのスコープであるとは限りません。

angular.module('app', [])

.controller('AppController', function(){
  
  var self = this;
  
  self.one = "one";
  self.two = "two";
  
})

.directive('testCompiler', ['$compile', function($compile){
  return {
    restrict : 'E',
    scope : {
      template : '@'
    },
    link : function(scope, element){
      
      var template = angular.element(scope.template);
      var linkFn = $compile(template);
      var child = linkFn(scope.$parent);
      $(element).append(child);
    
    }
  
  
  };

}]);
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.2.23/angular.min.js"></script>


<div ng-app="app" ng-controller="AppController as AppCtrl">

 <test-compiler template="<div> Hello <span ng-bind='AppCtrl.one'> </span> <a ng-href='AppCtrl.two' ng-bind='AppCtrl.two'> </a> </div>"> </test-compiler>

</div>

4

2 に答える 2

1

次のようなコードが必要です。

ng-href='{{AppCtrl.two}}'
于 2015-10-01T10:48:49.317 に答える
1

ディレクティブのドキュメントng-hrefを読むと、テンプレート式 (例: {{propertyOnTheScope}})が必要であることがわかります。

<test-compiler template="<div>Hello <span ng-bind='AppCtrl.one'></span> <a ng-href='{{AppCtrl.two}}' ng-bind='AppCtrl.two'></a></div>">

補足として、これはテンプレートを渡す非常に奇妙な方法であり、マークアップが非常に不明確になります。transcludeの使用を検討することをお勧めします。

于 2015-10-01T10:48:58.957 に答える