【发布时间】:2016-08-05 12:21:29
【问题描述】:
我有在其中进行身份验证的 service.js。成功时从 controller.js 执行服务回调函数
service.js:
'use strict';
angular.module('Authentication')
.factory('AuthenticationService', ['$http', '$cookieStore', '$rootScope','$timeout', '$location', '$window',
function ($http, $cookieStore, $rootScope, $timeout, $location, $window) {
var service = {};
service.Login = function (username, password, callback) {
$http.post('..json', {
headers: {
username: username,
password: password
}
})
.success(function (data, status, headers, config) {
$timeout(function () {
callback(status);
}, 1000);
});
};
return service;
}])
controller.js:
'use strict';
angular.module('Authentication').controller('LoginController', ['$scope', '$rootScope', '$location', 'AuthenticationService', '$http', '$timeout', '$window',
function ($scope, $rootScope, $location, AuthenticationService, $http, $timeout, $window) {
**$scope.name=true;**
$scope.login = function () {
AuthenticationService.Login($scope.username, $scope.password, function (response) {
if (response === 'Success') {
$http.get('..json').success(data,status,headers,config){
**$scope.value=true;**
})
} else {
alert("Error");
}
});
};
}]);
HTML:
我有 2 个复选框与来自 controller-$scope.name 和 $scope.value 的两个 $scope 变量相关联
<input type="checkbox" ng-checked="name"> abc
<input type="checkbox" ng-checked="value">xyz
现在由于两个 $scope 变量都设置为 true 两个复选框最初都应该被选中......但是带有 $scope.name 的复选框被选中并且 $scope.value 未被选中
关于为什么会发生这种情况以及如何使第二个复选框也最初根据 $scope.value 进行检查的任何想法
【问题讨论】:
-
你说“两个$scope变量都设置为true”,但是我看到的方式,$scope.value只有true才表示登录成功,对吧?
-
是的..没错,所以登录后应该选中复选框对吗?但登录后未选中..这些复选框在登录后显示的html文件中
-
也许登录没有通过。如果您希望它们最初都被检查,请在 $scope.name=true 之后移动“$scope.value=true”
-
实际上登录成功,在 $scope.value 中我需要一个从 $http 响应中得到的值,所以无法移出,登录后我会得到值 true/false,实际代码:: $scope.value=response.visible
-
离题但我认为仍然有用。当它随着更多功能等变得更大时,如果您使用承诺而不是回调,您会发现管理和扩展要容易得多。您的示例中已经有一个嵌套的
$http调用。使用 Promise,您可以将其展平,并将您的 Promise 链接起来,几乎不需要嵌套。
标签: javascript angularjs