2015-06-01 65 views
0

我有簡單的自定義指令,檢查並設置其元素href。 但我需要檢查與從服務器(異步)加載的數據的href,以確保用戶有權訪問該鏈接(ACL的種類)。角延遲自定義指令的鏈接功能

那麼我怎麼能延遲鏈接功能的工作,直到這個數據完成加載?

+0

把它在$超時。 – user3227295

+0

@ user3227295如果你的意思是延遲$ timeout,這是一個非常糟糕的做法,如果你的意思是$ timeout沒有延遲,$ tmeout不知道http請求及其狀態,只適用於$ scope vars和消化 – Exlord

回答

0

好吧,我煮東西爲我自己,感謝任何指針改進它, 我做了一個gist

angular.module('myModule') 
    .factory('dataLoader', ['$http', function ($http) { 
     var __list = null; 
     var __request = null; 
     return function (callbak) { 
      if (__list) 
       callbak(__list); 
      else { 
       if (!__request) 
        __request = $http({ 
         method: 'GET', 
         url: '/myurl', 
         params: {} 
        }); 

       __request.success(function (d) { 
        if (d.data) { 
         __list = d.data; 
         callbak(__list); 
        } 
       }); 
      } 
     } 
    }]) 
    .directive('myDirective', ['dataLoader', function (dataLoader) { 
     return { 
      restrict: "A", 
      compile: function (scope, element, attrs) { 
       return function (scope, element, attrs) { 
        dataLoader(function (acl) { 
         console.log(acl.length); 
         var href = attrs.myDirective; 
         if (href) { 
          if (href[0] != '#') 
           href = '#' + href; 

          element.attr('href', href); 
         } 
        }); 
       }; 
      } 
     }; 
    }]);