サービス/ファクトリの変数に新しい値を割り当てると、バインディングが壊れ、コントローラーが値の更新を停止するようです$scope.verify
。サービスオブジェクトをコンソールに出力するだけのコントローラーで関数を呼び出さない限り、バインディングが更新されます一度。skypeClient
工場で間違った値を割り当てていますか?
property.changed(function (_status) {
state = _status;
console.log("New State" + state);
});
元。私は and を実行$scope.signIn()
し、バインディングを更新しますsigningIn
が、値が(コンソールで検証された)に変更された場合、それ以降のすべての変更に対して実行しない限りSignedIn
、コントローラーは更新されません。SignedIn
$scope.verify()
skypeClient.state
以下のコードを参照してください。
コントローラ
controller('loginCntrl', function ($scope,skypeClient) {
$scope.skypeClient = skypeClient;
$scope.signIn = function () {$scope.skypeClient.signIn($scope.user, $scope.password)}
$scope.signOut = function(){$scope.skypeClient.signOut()}
$scope.verify = function () {
console.log(skypeClient);
console.log($scope.skypeClient);
}
});
サービス
.factory('skypeClient', function () {
//Service Properties
var client = new Skype.Web.Model.Application;
var state = 'SignedOut';
var property = property = client.signInManager.state;
//Initialize Listeners
var init = function () {
client.signInManager.state.when('SignedIn', function () {
console.log('Signin:' + state); // This outputs the correct value
});
property.changed(function (_status) {
state = _status; //<--WHERE VALUE IS UPDATED
console.log("New State" + state);
});
}
//Signin Function
var signIn = function (username, password) {
client.signInManager.signIn({
username: username,
password: password
}).then(function () {console.log('LoggedIn');});
}
var signOut = function () {
client.signInManager.signOut()
.then(function () {
this.isSignedIn = false;
}, function (error) {
this.erros.push(error);
this.errorCount++;
});
}
init();
return {
signIn: signIn,
signOut, signOut,
state: function(){return state}
}
});
HTML
(Current Signin State: {{skypeClient.state()}} )