在指令的链接函数执行之前编译已转换的内容

时间:2014-05-20 23:26:03

标签: javascript angularjs angularjs-directive

我希望在链接函数执行之前编译已转换内容的内容。目前,如果我转发ng-bind-safe,则直到我的链接功能之后才会添加内容。

我可以在链接功能中执行scope.$apply()(并且它可以正常工作)但由于摘要周期已在进行中,我会收到控制台错误。

思考?谢谢!

1 个答案:

答案 0 :(得分:0)

在编译和链接阶段($ compile和$ link函数)期间,您只能访问$ compile函数中的模板,并可以访问$ link函数中的范围和模板。您还没有访问渲染模板的权限,因为它尚未发生。为此,您需要设置一个监视表达式,您将为其提供回调函数。当您正在观看的值发生变化时,Angular会通知您,并且在此回调中您可以访问呈现的模板。

此监视表达式只能在$ link函数中完成,因为它只能放在指令中,可以正确访问范围。

以下是一个例子:

app.directive('tmTime', function() {
    return {
        restrict: 'A',
        template: '<div>{{time}}</div><div ng-transclude></div>',
        transclude: true,
        link: function (scope, element, attr) {
            scope.time = 'Its hammer time!';
            scope.$watch('time', function(newVal, oldVal) {
                  // this is your call back function
                  // within here, you have access to the rendered template
                  alert(element[0].outerHTML); // (it's hammer time! in first div, transcluded contents in second div)
            });
        }
     };
 });