私はAngularJSを学び、scope
、directives
およびdom
についての概念で明確にするためにいくつかの奇妙な実験を行っています。AngularJS - HTML要素のスコープを新しいスコープに変更する
AIM:私の問題があるrootCtrl
eggly.controller('rootCtrl',function($scope,$timeout,$compile){
$scope.box = "lunchbox"; --> first assign box = lunchbox
$timeout(function(){
//delete $scope;
var newScope = $scope.$new(); --> create a new scope
newScope.box = "dinnerbox"; ---> Assign new value
$compile($('#grocery'))(newScope); --> compile div with new scope
//newScope.$apply(); --> I think $timeout already do $apply so commented out
},1000);
});
新しく作成された子スコープ」
index.htmlを
<html ng-app="eggly" ng-controller="rootCtrl">
<body>
<div id="grocery">
{{box}}
</div>
</body>
</html>
にHTML要素<div id="grocery">
のスコープの変更:
- 私は
$timeout
機能でnew scope
と$compile
を作成した場合、私はnew scope
と$timeout
機能ではないではない$compile
を作成しない場合、私は - を期待していて、その後、私のビューが
dinnerbox
で更新され、その後私の見解は、古い値、すなわち私を示していlunchbox
しかし、クロムコンソールショー私にangular.element($0).scope().box
私のdinnerbox
($タイムアウト実行後)の範囲を示しています。
私は間違っていますか?
いずれも最初の場所でのコントローラに属していません。また、 '$ compile'をjQueryオブジェクトに使用しません。あなたがしようとしているのは、貧しい人の指示を作り、これに対して実際の角度の指示を使うべきです。 – charlietfl
@charlietfl:あなたがコメントしたことは別として、私はあなたから期待していることのみ、なぜそれが動作していないのか知っていますか?ありがとう – voila
@charlietfl:$コンパイルでは、jqueryオブジェクトのangular.elementを使用することができます。AFAIK – voila