在 Angular 中,当我收到一些新数据时,如何强制模板重新编译
In Angular, how to force template to recompile when I receive some new data?
假设我有一个指令,其中模板包含一些数据,这些数据提供了另一个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中使用,它依赖于数据使用的值来绘制饼图。
我有另一个接收数据的控制器:
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 相同,则此方法有效
您需要监视指令的控制器。
$scope.$watch('dataUsed', function(oldValue, newValue) {
console.log(oldValue, newValue)
}, true)
相关文章:
- 强制模板刷新ember.js
- 通过php页面中的js强制下载txt
- 如何使用jquery强制一个单词更改大小写等以保留品牌
- 如何在使用剑道 MVVM 下拉列表时强制选择第一项
- AngularJS指令出错-无法读取属性'编译'的未定义
- 如何使用ViewCompiler手动编译DOM的一部分
- 预编译的车把模板使文件大小加倍
- 当使用extern和目标JavaScript时,我如何强制Haxe编译器使用require语句
- Mocha react本地路由器编译错误
- 强制浏览器更新缓存的HTML5视频对象
- Babel编译错误:找不到模块核心js/library/fn/get迭代器
- 强制谷歌为javascript背景图像编制索引
- jQuery中的attr()是否强制小写
- 如何使用javascript将字段强制设置为false
- 在链接d3强制布局中添加和删除类
- iPhone强制下载文件
- 如何强制 Google 闭包编译器重命名方法,即使使用对象也是如此
- 在 Angular 中,当我收到一些新数据时,如何强制模板重新编译
- 在没有$scope更改的情况下强制重新编译已筛选的ng属性
- AngularJS:TypeScript编译过程并吞噬uglify-是否有一种方法可以强制TS使用IIFE生成函数而不是