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
は更新されていないようです。
何か間違っていますか?
おかげ
可能な重複した(HTTP
$timeout
で私の変数を包んだ "完了" された後、[jqueryのから、コントローラ変数を更新する方法は?]:/ /stackoverflow.com/questions/16886222/how-to-update-controller-variable-from-jquery) – Jorrex