2013-04-09 37 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