2016-07-29 20 views
0

AngularJSに単一ページアプリケーションを構築していて、ボタンクリックで実行される関数でcontrollerが設定されています。この関数は約束で実行されます。関数が解決されると、私はルート変数を更新して、$locationのパスを変更しています。しかし、ルート変数と$locationは更新されていないようです。jQueryでAngularJSスコープ変数が更新されていません

すべてのコードが

DOM生産

からexampledされ、この点に注意してください。

<div ng-controller="ExampleController"> 
    <button ng-click="button_function('I am a variable')">Run function</button> 
</div> 

はコントローラー:

app.controller('ExampleController', ['$scope', '$location', function($scope, $location) { 

    $scope.button_function = function(variable) { 
     $scope.$root.show_something = true; 

     my_function.something(variable).done(function(data) { 
      if (data) { 
       $scope.$root.show_something = false; 
       $location.path('/go-to-path'); 
      } else { 
       alert('Something went wrong'); 
      } 
     }]); 
    }; 

}]); 

これはmy_functionコードです

var my_function = { 
    something: function(variable) { 
     var deferred = $.Deferred(); 

     var window = window.open('http://dynamic.url/', '_blank'); 

     $(window).on('loadstart', function(e) { 
      var url = e.originalEvent.url; 

      if (url === 'http://dynamic.url/expected_response') { 
       window.close(); 
       deferred.resolve({ 
        key_1: 'data', 
        key_2: 'more data' 
       }); 
      } 

     }); 

     return deferred.promise(); 
    } 
}; 

すべて正しく見えますか?しかし、my_function.something(variable)が「完了」の場合、$location$scope.$root.show_somethingは更新されていないようです。

何か間違っていますか?

おかげ

+0

可能な重複した(HTTP $timeout

app.controller('ExampleController', ['$scope', '$location', '$timeout', function($scope, $location, $timeout) { $scope.button_function = function(variable) { $scope.$root.show_something = true; my_function.something(variable).done(function(data) { if (data) { $timeout(function() { $scope.$root.show_something = false; $location.path('/go-to-path'); }, 1); } else { alert('Something went wrong'); } }]); }; }]); 

で私の変数を包んだ "完了" された後、[jqueryのから、コントローラ変数を更新する方法は?]:/ /stackoverflow.com/questions/16886222/how-to-update-controller-variable-from-jquery) – Jorrex

答えて

0

私は解決策を見つけました。私のコントローラで

deferredが、私は回答のhere

0

あなたはdeferred.promiseの代わりdeferred.promise()を返す必要があります。

- 編集:私の悪い私はあなたが誤解しているように$ qを使用していないことを私は見ていませんでした。

関連する問題