2013-02-10 74 views
3

我想在Angularjs中使用指令来检查用户是否是为了相应地更改模板而自己。

例如

<li is-self > 
     <a ng-show="logged_in" ng-href="https://stackoverflow.com/users/{{user.public_id}}"> Settings </a> 
    </li>  

诚然,这可能不是这个问题的最好办法,但我想不出更好的办法,此刻做到这一点。

但是我遇到的问题是,我不能做的指令中的HTTP请求,因此我不得不把它放在一个控制器,并引用其作为范围函数即

user_controller

$scope.isSelf = -> 
     $http({method: 'GET', url: '/is_self/' + $routeParams.id}). 
     success((data, status, headers, config) -> 
      if data 
       $scope.logged_in = true 
     ). 
     error((data, status, headers, config) -> 
      console.log(data) 
     ) 
然而

user_module

userModule.directive('isSelf',() -> 
     link: ($scope) -> 
     $scope.isSelf() 

这种技术带来了一个问题,因为该指令被跨多个文件和多个控制器使用。我认为最合适的解决方案就是在指令中执行请求,但这不起作用,因为您似乎无法将$ http传递给它。

我的理想的解决方案是什么,我有一个像

userModule.directive('isSelf',() -> 
    link: ($scope, $http) -> 
     $http({method: 'GET', url: '/is_self/' + "3f8686589ad"}). 
      success((data, status, headers, config) -> 
       if data 
        $scope.logged_in = true 
     ). 
      error((data, status, headers, config) -> 
       console.log(data) 
     ) 
) 

组合显然我相当新的框架,所以任何帮助将不胜感激。

+0

可能您发布解决自己的问题下面并将其标记为接受的答案?它将从“未答复”类别中删除它。 – 2013-02-11 15:28:06

+0

难道你不能只是创建一个绑定到你的指令的控制器来允许它始终使用指令创建吗? – Oak 2014-01-20 21:41:21

回答

-1

好吧,我找到了解决方案。这里面对那些有同样问题的人。

好的,经过一番修补之后,我意识到我想我是以错误的方式去做的。我按照下面的建议使用了服务,如果任何人有同样的问题并且想知道的话,这里是最终的代码。

模块

userModule = angular.module('users', ["ngResource"]) 

userModule.factory('User', ['$resource', '$http', ($resource, $http) -> 
    User = $resource "https://stackoverflow.com/users/:id", id: "@id", 
     update: method: "PUT" 
     destroy: method: "DELETE" 

    User::isSelf = (id, cb) -> 
     $http.get('/is_self/' + id).success (data) -> 
      if data 
       cb true 

    User 
]) 

控制器

StatsShowCtrl = ($scope, $location, $routeParams, User) -> 
    User.get id: $routeParams.id, (user) -> 
     self.original = user 
     $scope.user = new User(self.original) 

     $scope.user.isSelf $routeParams.id, (self) -> 
      if self 
       $scope.logged_in = true 

HTML

<li ng-show="logged_in"> <a ng-href="https://stackoverflow.com/users/{{user.public_id}}"> Settings </a></li>