这是一名证明问题的傻瓜:http://plnkr.co/edit/1ceWH9o2WNVnUUoWE6Gm
代码:
var app = angular.module('myApp', []);
app.controller('myCtrl', function($scope) {
console.log('yeah');
var header = $('#weird');
console.log(header);
header.attr("ng-style", "{'background-color' : 'red'}")
});
它添加了ng-style属性,但angular并不知道它,因此它从未应用过。
这是我尝试做的简化版本,我试图为chessboard.js生成的棋盘中的每个方块添加ng风格属性。我通过将ng-style属性添加到compile函数内的每个方块来实现这一点,就像我将ng-style属性添加到标头一样。如果有更好的方法,我很乐意了解它。如果没有,当添加ng样式属性时,如何更新角度?
我已经阅读了关于$scope
,$digest
和$apply
的内容,并且我已经尝试过与他们一起玩,但是还没有能够想办法。最好的方法是什么?
答案 0 :(得分:2)
这取决于指令的准确程度,但在ngStyle
的情况下,您可能需要重新编译一个元素:
app.controller('myCtrl', function($scope, $compile) {
console.log('yeah');
var header = $('#weird');
console.log(header);
header.attr("ng-style", "{'background-color' : 'red'}");
$compile(header)($scope);
});
当Angular与普通JS / jQuery混合时,通常会提出 $apply
,但只有当范围绑定需要更新时才有意义,但事实并非如此。此外,当异步回调事件发生时,它是有意义的,但是在控制器构造函数期间发生的范围变化被应用(没有魔法区分角度和非角度的东西,所以如果你触发'$ apply in progress'会出现你不需要时的摘要。
我假设你故意使用jQuery,而且我可以省去'angular-hates-jquery-selectors-bad-bad-you-re-doing-it-wrong'单调乏味。