2015-04-22 1 views
0

Я пытаюсь передать параметр URL к контроллеру AngularJS, используя код ниже:параметр Invoke функция как часть нг-INIT

<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); отобразит 'test', но вместо этого отобразит undefined.

Как передать параметр URL в контроллер AngularJS?

Update:

Вот решение, я пошел с:

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

Url имеет форму http://xxx.xxx.xxx?category=test

ответ

0

Не используйте нг-Init для чего-нибудь, но наложения специальных свойств нг-повтора , подробности см. в документах ng-init. Вместо этого, если вам нужно что-то прочитать из параметров URL, вы можете использовать $ routeParams или $ stateParams, если вы используете ngRoute или ui-router соответственно или используете $ location.search

1

Угловой встроенный помощник для чтения и настройки URL-адрес. В этом случае используйте $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>

Смежные вопросы