$compile 不在指令中编译 ng-href
$compile not compiling ng-href in directive
当我在一个属性中传递一个模板,然后编译它以在之后呈现它时,$compile 工作正常,除了 ng-href="expression"
,表达式没有被编译。
这是在编译函数中完成的,而在 link 函数中为时已晚吗?
顺便说一下,我 link 模板作用域是它的父级。我怎样才能找到最近的控制器范围。
$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>
您需要如下代码:
ng-href='{{AppCtrl.two}}'
如果您阅读 documentation for the 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.
当我在一个属性中传递一个模板,然后编译它以在之后呈现它时,$compile 工作正常,除了 ng-href="expression"
,表达式没有被编译。
这是在编译函数中完成的,而在 link 函数中为时已晚吗?
顺便说一下,我 link 模板作用域是它的父级。我怎样才能找到最近的控制器范围。
$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>
您需要如下代码:
ng-href='{{AppCtrl.two}}'
如果您阅读 documentation for the 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.