2013-04-09 70 views
1

我正在處理一個移動應用程序,其中列出了一些項目。這個列表可以下拉以啓動列表刷新(我正在使用iScroll4)。我現在試圖將這個事件綁定到我的角度控制器上,以便我可以進行api調用並更新模型。將自定義javascript事件綁定到角

JavaScript的基本如下:

[..] //javascript code to detect the pulldown event 

function pullDownAction(){ 
    //I want to update the scope here 
} 

基於我已閱讀,我需要做的角度指令,並從那裏調用事件,但我還沒有想出其中以上一段代碼應該去。

我自己也嘗試從pullDownAction函數內廣播的事件,聽它在控制器中,像這樣:

function pullDownAction(){ 
    var $rootScope = angular.injector(['ng']).get('$rootScope'); 
    $rootScope.$apply(function(){ 
      $rootScope.$broadcast('updateInbox'); 
    }); 
}); 

,然後在控制器:

$scope.$on('updateInbox', function(){ 
    $http.get(apiUrl) 
     .success(function (data) { 
       $scope.model = data; 
     });   
}); 

但我我確定我錯過了一些重要的東西,使代碼無法正常工作。我對角度很陌生,所以我還沒有真正掌握指令如何工作。

回答

2

我把它通過把所有的JavaScript代碼的事件在鏈接功能工作:

app.directive('pullToRefresh', function() { 
return { 
    restrict: 'AC', 
    link: 
    function (scope, element, attr) { 
      //Code to detect when element is pulled goes here 

      function pullDownAction(){ 
       scope.$eval(attr.pulldown); 
      } 

然後我只是把一個屬性的容器叫下拉,他們現在可以訪問相同的範圍。我的元素如下所示:

<div class="pull-to-refresh" pulldown="update()"> 
    //Element to be "pull-to-refreshable" here 
</div> 

update()當然是控制器中的一個函數,您可以在其中執行任何操作!

2

在指令的鏈接函數中,設置iScroll4插件。在你的鏈接函數中也定義pullDownAction()。然後,由於關閉,您將可以訪問示波器。

app.directive('iscroll4Wrapper', function() { 
    return { 
     link: function(element, scope, attrs) { 
      var pullDownAction = function() { 
      // update scope here 
      } 
      $(??).iScroll4({ // I have no idea how to initialize this 
      onSomeEvent: function(...) { 
       pullDownAction(); 
       scope.$apply(); // or put this in pullDownAction() 
      } 
      }); 
     } 
    } 
} 

你用注射器試了一下並沒有因爲you created new injector工作。

+0

我使它幾乎按照你所描述的方式工作,看到我的答案!謝謝 :) – 2013-04-11 07:27:12