Ionic / Angularjs将控制器更改为全局变量

时间:2016-07-14 02:55:46

标签: javascript angularjs ionic-framework

这是我的控制器:

(function () {

    var app= angular.module('app');
    app.controller('recommendedJobsCtrl', ['$scope', function(dataShare,$q,$scope, $ionicSideMenuDelegate,$window,$http,$timeout) {

    // passes contents to jobDetails to be rendered and displayed
      window.post =  function($event, res){
        console.log(angular.element($event.target).parent());
        dataShare.sendData(res)
      }
  /**
    * handles pagination
    *loads first 3 pages
  **/
  var i=1; 
  window.result=[];
  window.noMoreItemsAvailable=false;
  window.loadMore =  function()
    {
      console.log('here')
      if(i<4)
      {
        $http.get( "http://test.website.com/api/search/"+i).success(function(response)
        {
          i++; 
          $scope.result=$scope.result.push(response); 
          console.log(response);

          $timeout(function () 
          {
          $scope.result = response
          });

          $scope.$broadcast('scroll.infiniteScrollComplete');
        });
      }else
      {
        $scope.noMoreItemsAvailable=true; 
      }
    }

    ]);

}());

我读到我的控制器处于'用户严格'状态,因此它无法访问变量或函数。所以我放置了“窗口”这个词,使其成为全球性的。但现在它无法访问该功能,因为控制台无法打印。我该如何解决?

1 个答案:

答案 0 :(得分:0)

依赖注入不正确:

app.controller('recommendedJobsCtrl', [
  'dataShare',
  '$q', 
  '$scope', 
  '$ionicSideMenuDelegate', 
  '$window', 
  '$http', 
  '$timeout', 
  function(
    dataShare,
    $q,
    $scope,
    $ionicSideMenuDelegate,
    $window,
    $http,
    $timeout) {


   // Your code ...

}]);

您的代码应该特定于控制器。您应该在$scope $scope.<functionName> = function() {}$scope.noMoreItemsAvailable中创建函数和变量,或者像function <functionName>() {}var noMoreItemsAvailable一样在控制器中创建函数和变量。

如果使用window对象的意图是在控制器之间使用相同的代码,您可以将此代码放在factory中。