6


我对 Angularjs 很陌生。
我创建了一个 Angularjs 服务来存储一些“全局”变量。它看起来像这样:

.factory('authVars', function() {
    var sdo = {
        baseBackendUrl: 'https://www.myurl.com',
        user: '',
        password: '',
        token: '',
        isLogged: false
    };
   return sdo;
})

现在我想在不同的控制器中使用 ng-show/hide。

<div class="alert" ng-hide="authVars.isLogged">
    <strong>whatEver</strong>
</div>

这甚至可能吗?还是将其存储在 rootScope 中更好?
对于一些帮助,我将非常感激;-) thx

4

5 回答 5

2

只需将您的工厂注册到每个控制器。这是代码重用的目标服务。服务就像实用程序,你编写一次就可以在许多控制器中使用它

JS

myApp.factory('authVars', function() {
    var sdo = {
        baseBackendUrl: 'https://www.myurl.com',
        user: '',
        password: '',
        token: '',
        isLogged: false
    }; 

    return {
        getSdo: function() {
            return sdo;
        }
    };

})


function MyCtrl($scope, authVars) {

    $scope.authVars = authVars.getSdo();
}

演示Fiddle

于 2013-10-16T06:56:41.373 回答
1

您需要在控制器中注入服务,如下所示。

  app.controller('ctrl',function($scope, authVars){          
    $scope.authVars=authVars;   
  });
于 2013-10-16T06:58:50.107 回答
1

是的,这要归功于依赖注入系统。
您可以在需要它的每个控制器中“注入”此服务。

假设您有一个这样的模板:

<div ng-controller="MyController">
  <div class="alert" ng-hide="authVars.isLogged">
    <strong>whatEver</strong>
  </div>
</div>

然后你必须有一个这样定义的控制器:

.controller('MyController', function (authVars) {
  $scope.authVars = authVars;
});
于 2013-10-16T07:00:56.540 回答
1

有几种方法可以在 Angular 中使用常量:

使用angular.constant

angular.module('myApp.config', []).
   constant('APP_NAME', 'MyApp');

angular.module('myApp.controllers', ['myApp.config'])
  .controller('AppCtrl', ['$scope', 'APP_NAME', function($scope, appName) {
     $scope.val = appName;
}]);

使用angular.value

angular.module('myApp.config', []).
   value('config', {
      appName: 'AppName'
   });

angular.module('myApp.controllers', ['myApp.config'])
  .controller('AppCtrl', ['$scope', 'config', function($scope, config) {
     $scope.val = config.appName;
}]);

或者您所做的方式,但工厂通常用于在返回配置对象之前设置一次,例如 $inject 一些依赖项(如 $locale)。

此外,我经常使用指令consts在我想要的范围内附加常量:

angular.module('myApp.config', []).

directive('consts', function(config) {
    return {
      restrict: 'A',
      link: function($scope) {
         $scope.config = config;
      }
    }
});

接着:

<div consts>
  <h2>{{config.appName}}</h2>
</div>
于 2013-10-16T07:10:48.193 回答
1

可以 100% 投入使用!只是不要忘记将其注入相关控制器中:

var Ctrl = function($scope,authVars){
    $scope.authVars = authVars;
}

示例:http: //jsfiddle.net/cherniv/pzFrs/2/

于 2013-10-16T06:54:57.887 回答