如何在AngularJS中编写返回true / false的服务?

时间:2017-02-09 03:42:44

标签: javascript angularjs

我一直在阅读AngularJS工厂和服务,并且遇到了很多例子。但我不理解他们背后的逻辑,也不能让他们工作。

myApp.service('loginCheck', function(Facebook) {
this.loggedIn = false;
Facebook.login(function(response) {
    if (response.status == 'connected') {
        this.loggedIn = true;
    }
});
});

如果我对这个概念的想法是对的,我需要让这个服务返回loggedIn变量。我应该使用工厂吗?我需要一直存储这个变量,而不是每次需要时再次调用它。我该怎么做。我无法真正理解工厂和服务之间的区别。我是初学者。

if(loginCheck.loggedIn){
    console.log("logged in!");
}
else{
    console.log("not logged in :/")
}

谢谢。

2 个答案:

答案 0 :(得分:3)

你可以这样做,

var app = angular.module('app', []);
app.controller('loginController',['$scope', 'MyUser',function($scope, MyUser)
{
    $scope.isloggedin = MyUser.getStatus();
    alert($scope.isloggedin);
}]);
app.service('MyUser', [function($scope) {
  this.loggedIn = false;
  return {
    getStatus: function() {
       this.loggedIn = true;
       return this.loggedIn;
    }
  }
}]);

<强>样本

<!DOCTYPE html>
<html>
<head>
  <meta charset="utf-8" />
  <title></title>
</head>
<body ng-app="app" ng-controller="loginController">
  <script type="text/javascript" src="//ajax.googleapis.com/ajax/libs/angularjs/1.3.6/angular.js"></script>   
</body>
</html>
WHERE

答案 1 :(得分:2)

定义工厂并作为依赖项传递给控制器​​。

var myApp = angular.module('myApp', []);
myApp.factory('loginCheck', ["Facebook", function(Facebook) {
  var object = {
    loggedIn: false,
    loginFacebook: function() {
      // do facebook login here:
      //Facebook.login(function(response) {
      //  if (response.status == 'connected') {
          object.loggedIn = true;
      //  };
      }
    };

  object.loginFacebook();
  return object;
}]);

myApp.controller('myCtrl', ['loginCheck', '$scope', function(loginCheck, $scope) {
  $scope.loggedIn = loginCheck.loggedIn;
}]);

检查此jsFiddle示例here

我不了解facebook身份验证,但我认为这些链接可能会对您有所帮助:https://blog.brunoscopelliti.com/facebook-authentication-in-your-angularjs-web-app/https://developers.facebook.com/docs/javascript/howto/angularjs

要查找服务和工厂之间的不同,请查看this questionthis link