0
誰でも説明できます。なぜなら、要素をクリックすると、なぜが更新されるのですか?ビュー層の更新(ただしconsole.log
新しい値を印刷)、両方のイベントが同じ機能を発射するもののvm.update()
AngularJSディレクティブ内の双方向バインディングは、ng-clickで動作しますが、window.onclickとは動作しません。
<!DOCTYPE html>
<html>
<head>
<script data-require="[email protected]" data-semver="1.5.9" src="https://code.angularjs.org/1.5.8/angular.js"></script>
<script>
var app = angular.module('test', [])
.directive('testDir', function() {
return {
controllerAs: 'vm',
bindToController: true,
controller: function() {
var vm = this;
vm.random = Math.random();
window.onclick = function() {
vm.update();
};
vm.update = function() {
vm.random = Math.random();
console.log(vm.random);
};
},
template: '<div ng-click="vm.update()">Random number after click {{vm.random}}<input ng-model="vm.random"/></div>'
}
});
</script>
</head>
<body ng-app="test">
<h1>My directive</h1>
<test-dir></test-dir>
</body>
</html>
私はwindow.onlick後vm.randomを更新することができるため、このスニペットでは何を変更する必要がありますvm.randomを変更しますか?
をINGの
$scope.$apply
の世話をすること、である。$適用 '+ 1 'https://plnkr.co/edit/fy0yPf4DyyOjGbchA4Eg?p=preview –例にしてくれてありがとう@RJ –
このようにも動作します: 'window.onclick = funciton(){ vm.update(); $スコープ。$ apply(); } ' – vologa