JavaScriptを使用している場合は、スコープを理解する必要があります。これはここで最もよく説明されています... w3schools.com/js/js_scope.asp要するに
:
$スコープは、コントローラ(角度)で事前に定義し、等どこでも、1つのコントローラで利用可能です。 $ rootScopeはすべてのコントローラで使用できます。スコープのこの例を参照してください:CTRL1のコードを想定し
.controller('ctrl1', function($scope, $rootScope) {
var a = 1;
$scope.a = 2;
$rootScope.a = 3;
var funct1 = function() {
var b = 4;
$scope.b = 5;
$rootScope.b = 6;
console.log(a) // returns 1 as inherits scope
console.log($scope.a) // returns 2 as inherits $scope scope
console.log($rootScope.a) // returns 3 as inherits $rootScope scope
console.log(b) // returns 4 as shares scope
console.log($scope.b) // returns 5 as inherits $scope scope
console.log($rootScope.b) // returns 6 as inherits $rootScope scope
}
funct1();
console.log(a); // returns 1 as shares scope
console.log($scope.a); // returns 2 as inherits $scope scope
console.log($rootScope.a); // returns 3 as inherits $rootScope scope
console.log(b); // returns undefined as b is defined out of scope.
console.log($scope.b); // returns 5 as inherits $scope scope
console.log($rootScope.b); // returns 6 as inherits $rootScope scope
})
は、すでに他のコントローラからアクセスできるだけで定義された変数は、$ rootScope.aと$ rootScope.bでしょう実行しました。他のすべては範囲外であり、そのように定義されていません。
これはあまり単純化されていませんが、$ scopeと$ rootScopeを初心者向けに説明しています。
よくある間違いは、変数の定義を混同することであり、これがOKであれば、次のテストとしてスコープを見て、この最初のすなわち、ユーザー対$ scope.usersをチェックvar x = y;
と$scope
と$rootScope
オブジェクト。
出典
2016-06-20 17:54:31
Ant
signInとlogoutの2つの関数が定義されていないと仮定します。また、ユーザーが定義されているかどうかはわかりません。 $ scope.userは表示できますが、varユーザーは表示されません。コンソールは何を言いますか?それらはどこに定義されていますか? – Ant
こんにちはAnt、どちらの関数も定義されており、if/else文の外にあることを意図しているため動作しています。ユーザーはコードの別の部分にも定義されています(アプリのコントローラなので、ここではあまりにも大きくなりすぎます)。コンソールに何かエラーがあったと言う人はいません。ポップアップは期待通りに表示されますが、ok/cancelをクリックすると何も起こりません。 – MirKat
codepenでこの動作をデモできますか? – Ant