リスティング広告 運用代行サービス|株式会社カルテットコミュニケーションズ|Yahoo広告/Google広告正規代理店

【AngularJS】 バインドした値をAngularJS外のスコープから更新する

公開日:
更新日:

AngularJS-large

 

AngularJSでバインドした値を、クロージャ内など AngularJS のスコープ外から更新する際の対処法です。

AngularJS では バインドした値を AngularJS のスコープ外から更新した値はビュー等に反映されません。下記はその例になります。

[html]
<!– html –>
<div ng-controller="MyCtrl">
Hello, {{name}}!
</div>
[/html]
[js]
// javascript

var myApp = angular.module(‘myApp’,[]);

function MyCtrl($scope) {
$scope.name = ‘world’;

setTimeout(function () {
$scope.name = ‘timeout’;
}, 2000);

}
[/js]

JSFIDDLE(プレビュー)

このように2秒経過しても値が更新されません。

このような場合には AngularJS の $rootScope サービスを使って、AngularJS 内のスコープからクロージャを実行します。

[js]
// javascript

var myApp = angular.module(‘myApp’,[]);

function MyCtrl($scope, $rootScope) {
$scope.name = ‘world’;

setTimeout(function () {
$rootScope.$apply(function () {
$scope.name = ‘timeout’;
});
}, 2000);

}
[/js]

JSFIDDLE

こうする事で2秒経過後に値が更新されます。

これだけを見るとAjax通信のコールバックを書くたびに $rootScope サービスを使うのか?
等の疑問がわきますが、AngularJS では $rootScope サービスをラップしたサービスが提供されていますので、AngularJS のスコープを意識する必要は殆どありません。

$timeout サービスを使用した実例です。

[js]
// javascript

var myApp = angular.module(‘myApp’,[]);

function MyCtrl($scope, $timeout) {
$scope.name = ‘world’;

$timeout(function () {
$scope.name = ‘timeout’;
}, 2000);

}
[/js]

JSFIDDLE

こちらの場合でも2秒後に値が更新されることが確認できます。

1営業日以内に返信いたします 広告の運用代行についてのお問い合わせはこちら
シェアする

ブログ記事の中で広告運用の事例をご紹介することがありますが、実際の事例を一部加工した内容となっておりますのでご留意ください。

また、2018年7月24日よりGoogle AdWordsはGoogle広告に名称変更されました。それ以前の記事に関してはGoogle AdWordsと表記されておりますのでご了承ください。


リスティング広告の
情報をお届け

メルマガではリスティング広告に詳しくなれる記事を毎週一週間分まとめてお届けします。不定期にはなりますがリスティング広告に限らず、Web集客改善に繋がる資料もお送りしていきますので、興味のある方はぜひご登録ください。

同じカテゴリの最近の記事