通过jQuery添加ng-style属性,角度不更新

时间:2015-04-07 00:32:33

标签: javascript jquery angularjs

这是一名证明问题的傻瓜: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的内容,并且我已经尝试过与他们一起玩,但是还没有能够想办法。最好的方法是什么?

1 个答案:

答案 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'单调乏味。