javascript - 在 Angular 中,当我收到一些新数据时如何强制模板重新编译?

标签 javascript angularjs

假设我有一个指令,其中模板包含一些数据,提供另一个 JS 来绘制饼图:

mymodule.directive('myGauge', ['$http', function() {
    return {
        restrict: 'E',
        template: '<div class="quota-dynamic"><h3>Limit Summary</h3><div class="d3_quota_bar"><div class="pie_chart" data-used="{$ dataUsed $}"></div></div>'

    }
}]);

而“pie_chart”在另一个JS中使用,它依赖数据使用的值来绘制饼图。

我有另一个接收数据的 Controller :

mymodule.controller('MyCtrl', ['$scope', '$http', function($scope, $http) {
    $scope.$parent.$watch("toggled", function(toggled) {
        var tenant_id = 1234;
        if (!$scope.$parent.isCollapsed()) {
            $http({
                method: 'get',
                url: 'http://localhost:8080/admin/projects/' + tenant_id + '/test/'
            }).success(function (data, status) {
                $scope.dataUsed = data.totalInstancesUsed / data.maxTotalInstances * 100;
            }).error(function () {
            });
        }
    });
}]);

当我收到数据时,对于饼图来说为时已晚,因为它已经绘制了。我想知道是否有办法强制指令再次使用新数据更新模板?

谢谢。

最佳答案

如果您需要重新编译模板,因为还有其他指令需要重新渲染,您可以将其添加到指令中:

controller: function($scope,$element){
    $scope.$watch( 'dataUsed', function( newVal, oldVal ){
        $compile($element.contents())($scope);

    });
}

如果指令的范围与 MyCtrl 相同,则这是有效的

关于javascript - 在 Angular 中,当我收到一些新数据时如何强制模板重新编译?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26979925/

相关文章:

angularjs - 提高绩效

javascript - 如何动态更新 Angular ui-grid 列的 columnDef

javascript - 单击鼠标后如何复制/重复 HTML 元素?

javascript - 如何在 AngularJS 中正确设置多个 Controller ?

javascript - 如何在条件渲染中预渲染 React 组件?

javascript - 更改 polymer 转盘上的文本

javascript - 可以下载样式表并将其应用于 Angular ngBindHtml 吗?

angularjs - Firebase - 按列过滤

javascript - 生成 JavaScript 来制作下拉菜单

javascript - 如何使用 javascript 的 fetch 方法捕获 401 错误