将服务变量注入指令

时间:2015-11-11 04:26:18

标签: angularjs angularjs-directive angularjs-service angularjs-injector

所以我遇到了一些麻烦。我查看了Injecting service to Directive之前的所有解决方案,但我真的不知道我做错了什么。我有一个authServices如下所示。

app.factory('authService', ['$http', function ($http) {

var authServiceFactory = {};

var _authentication = {
    isAuth: false,
    userName: ""
};
var _login = function (loginData) {
_authentication.isAuth = true;
_authentication.userName = loginData.userName;
}
appFactory.login = _login;
return appFactory;
}]);

我通过他们提出的方法注射它。

    app.directive('headerNotification', ['authService', function (authService) {
    return {
        templateUrl: 'app/scripts/directives/header/header-notification/header-notification.html',
    restrict: 'E',
    replace: true,
    link: function (scope) {
        scope.authService = authService;
    }
    }
}]);

我的HTML是

    <li data-ng-hide="authentication.isAuth">

我真的觉得我只是做错了。任何帮助将不胜感激。

1 个答案:

答案 0 :(得分:1)

您视图中的authentication.isAuth是什么。

我想你错过拼写你的对象。

<li data-ng-hide="authService.isAuth">

您的范围对象为authService而不是authentication,对吗?

更新 - 通过指令

我假设你的控制器中有你的auth变量。

$scope.myAuthService = authservice;

不,您可以将此变量作为属性传递给您的指令。

<header-notification my-auth="myAuthService"> </header-notification>

此处myAuthService是范围变量。

更改您的指令以接受此变量

app.directive('headerNotification', function () {
    return {
                templateUrl: 'app/scripts/directives/header/header-notification/header-notification.html',
                restrict: 'E',
                scope : {
                            myAuth : '=' // here you specify that you need to convert your attribute variable 'my-auth' to your directive's scope variable 'myAuth'
                        },
                replace: true,
                link: function (scope, element, attr, controller) {
                      // here you will get your auth variable
                      scope.myAuth; // this contains your auth details
                }
            }
});