下面的片段,Plunker 在这里:http ://plnkr.co/edit/WA6tIfqXV6dO4pbsqxu9?p=preview
我经常面临的一个挑战是在触发指令元素上的绑定时从指令范围更新控制器范围,例如“点击”。我已经通过在更改指令的范围后调用 $apply() 来使其工作,但这是否矫枉过正?
所以说我有一个恰当地命名为“值”的控制器值:
.controller( 'coolCtrl', [ '$scope', function( $scope )
{
$scope.value = 1;
}])
我想在单击指令元素后从指令中增加该值:
.directive( 'testScope', function()
{
return {
restrict: 'E',
replace: true,
scope: {
value: '='
},
template: '<button>Increase value</button>',
link: function( scope, element, attrs )
{
// Note: just using standard jqLite here
element.on( 'click', function()
{
scope.value++;
scope.$apply();
});
}
};
})
每次点击都需要调用 $apply 来更新父范围吗?如果用户正在键入,整个父作用域是否必须在每次按键时都经历一个 $digest 循环?
PS 我对 Angular 的熟悉程度令人谦卑。