使用afterRender回调后,角度渲染无法正常工作

时间:2016-04-12 12:41:07

标签: javascript angularjs

以下是我正在使用的当前代码

App.directive('afterRender', ['$timeout', function ($timeout) {
    var def = {
        restrict: 'A',
        terminal: true,
        transclude: false,
        link: function (scope, element, attrs) {
            $timeout(scope.$eval(attrs.afterRender), 0);
        }
    };
    return def;
}]);

我称之为

after-render="disableFullPage"

现在我遇到的当前代码的问题是disableFullPage函数被称为罚款。但是角度不会渲染任何数据。所以,如果我把

{{message}}

未呈现。此外,如果我删除后渲染,渲染工作正常。有人可以帮我解决我做错了什么,如果可能的话请编辑上面的代码并提供一个简短的描述,以便我更好地理解,因为我对角度相对较新。

1 个答案:

答案 0 :(得分:1)

我看到这里发生了两件事。

首先,您正在设置terminal: true,这将阻止对指令和表达式的进一步解释。

According to the docs

  

如果设置为true,则当前优先级将是最后一组   将执行的指令(当前优先级的任何指令   仍将按相同优先级的执行顺序执行   未定义)。 请注意中使用的表达式和其他指令   指令的模板也将被排除在执行之外。

第二次$parse将评估您在当前范围的上下文中提供的任何表达式。这就像你刚刚写了一行javascript。

在上面的示例中,after-render="disableFullPage"假定disableFullPage是一个函数,那么什么都不会发生。您需要添加括号,就像正常调用函数一样:

after-render="disableFullPage()"