调用函数参数作为ng-init

时间:2015-04-22 22:05:19

标签: javascript angularjs

我尝试使用以下代码将URL参数传递给AngularJS控制器:

<div ng-app>
  <div ng-controller="TodoCtrl" ng-init="init(getParameter('myParam'))">  
  </div>
</div>

function TodoCtrl($scope) {

     $scope.init = function(category)
      {
        $scope.category = category;

        alert(category);
      };

}

function getParameter(theParameter) { 
          var params = window.location.search.substr(1).split('&');

          for (var i = 0; i < params.length; i++) {
            var p=params[i].split('=');
            if (p[0] == theParameter) {
              return decodeURIComponent(p[1]);
            }
          }
          return false;
    }

http://jsfiddle.net/U3pVM/15042?myParam=test

但似乎未正确调用函数getParameter('myParam')我希望alert(category);能够显示&#39; test&#39;但它显示undefined

如何将URL参数传递给AngularJS控制器?

更新:

以下是我采用的解决方案:

alert(gup('category' , $location.absUrl()))

function getParameter( name, url ) {

      name = name.replace(/[\[]/,"\\\[").replace(/[\]]/,"\\\]");
      var regexS = "[\\?&]"+name+"=([^&#]*)";
      var regex = new RegExp( regexS );
      var results = regex.exec( url );
      return results == null ? null : results[1];
    }

网址格式为http://xxx.xxx.xxx?category=test

2 个答案:

答案 0 :(得分:1)

Angular内置帮助程序来读取和设置网址。在这种情况下,请使用$location.search() :(请注意,此代码段仅适用于设置参数的页面!)

function TodoCtrl($scope, $location) {
  var param = $location.search().myParam;
  if(param) {
    $scope.category = param;
    alert(param);
  }
}
<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.2.23/angular.min.js"></script>
<div ng-app>
  <div ng-controller="TodoCtrl">
  </div>
</div>

在这里,我“假”设置参数,以便您可以看到它的实际效果:

function TodoCtrl($scope, $location) {
  $location.search('myParam', 'myValue')
  var param = $location.search().myParam;
  if(param) {
    $scope.category = param;
    alert(param);
  }
}
<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.2.23/angular.min.js"></script>
<div ng-app>
  <div ng-controller="TodoCtrl">
  </div>
</div>

答案 1 :(得分:0)

除了使用ng-repeat的特殊属性别名外,不要使用ng-init,有关详细信息,请参阅ng-init文档。相反,如果您需要从URL参数中读取内容,则可以使用$ routeParams或$ stateParams,如果您分别使用ngRoute或ui-router或使用$ location.search