2016-06-15 9 views
1

ボタンを押すと、ボタンが画面上にポップアップする機能を呼び出すようになっているコードのコードがあります。どちらの方法でも、ユーザーがOKまたはダンスを選択すると、別の関数が呼び出されます。問題は、これら2つの関数のどちらも呼び出されていないことです。非常に明白な何かが欠けていますか?Ionicポップアップ確認でifステートメントのコードが実行されていません

$scope.user = {}; 
// A confirm dialog 
$scope.showConfirm = function() { 
var confirmPopup = $ionicPopup.confirm({ 
       title: 'T&Cs', 
       template: 'Do you agree to the terms and conditions?' 
       }); 
confirmPopup.then(function(res) { 
       if(res) { 
        signIn(user) 
       } else { 
        logout(); 
       } 
     }); 
    }; 
+0

signInとlogoutの2つの関数が定義されていないと仮定します。また、ユーザーが定義されているかどうかはわかりません。 $ scope.userは表示できますが、varユーザーは表示されません。コンソールは何を言いますか?それらはどこに定義されていますか? – Ant

+0

こんにちはAnt、どちらの関数も定義されており、if/else文の外にあることを意図しているため動作しています。ユーザーはコードの別の部分にも定義されています(アプリのコントローラなので、ここではあまりにも大きくなりすぎます)。コンソールに何かエラーがあったと言う人はいません。ポップアップは期待通りに表示されますが、ok/cancelをクリックすると何も起こりません。 – MirKat

+0

codepenでこの動作をデモできますか? – Ant

答えて

0

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オブジェクト。

関連する問題