2013-02-10 75 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>