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

Ionic/Angularjs change controller to a global Variable

本文关键字:全局变量 控制器 Angularjs Ionic      更新时间:2023-09-26

这是我的控制器:

(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; 
      }
    }
    ]);
}());

我读到我的控制器处于"用户严格"之下,因此它无法访问变量或函数。所以我放了"窗口"这个词,让它全球化。但现在它无法访问该功能,因为控制台不会打印。我该如何解决这个问题?

依赖注入不正确:

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

   // Your code ...
}]);

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

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