2016-01-17 4 views
0

Предположим, у меня есть файл HTML, в который загружен файл AngularJS с помощью 'ngRoute'.Как передать переменную PHP в конфигурацию AngularJS

Тогда я инициализировать приложение, сделав index.php файл (я не отображая основные HTML-теги + Угловая JS включает здесь):

<?php $path = 'www.test.com' ?> 

<div ng-app="testApp" ng-init="path='<?php echo $path ?>"> 
    <div ng-view></div>  
</div> 

Я пытаюсь передать переменную PHP для мой AngularJS App Config, этим:

// Module 
var test = angular.module('testApp', ['ngRoute']); 

// Routes 
test.config(function($routeProvider) { 
    $routeProvider 
    .when('/', { 
     templateUrl: $rootScope.path + '/pages/display.htm', 
     controller: 'testController' 
    }) 
}); 


// Controllers 
test.controller('testController', ['$scope', function($scope) { 

}]); 

Это не работает, хотя, потому что $rootScope не определяемое. Может ли кто-нибудь сказать мне, что мне здесь не хватает?

ответ

3

на основе комментариев о желании сохранить PHP и сценарии отдельная просто добавить тег сценария с переменной, которую вы можете получить доступ из любой угловой

<script> 
    var myPathVar = '<?= $someVar; ?>'; 
</script> 

Затем вы можете сделать все, что вы хотите с внутренней угловой такие как добавить его как постоянный, передать его в $ rootScope в вашей конфигурации или что угодно

+0

Спасибо, я использовал этот подход. Да, в основном, если нет другого способа обхода, я делаю это. Круто! Приветствия за ответ! –

+0

никакой реальной необходимости для обходного пути. Конечно, можно утверждать, что это глобальный, но один глобальный можно терпеть с минимальным потенциалом воздействия. – charlietfl

+1

*** ВНИМАНИЕ *** Этот код, вероятно, уязвим для атак межсайтового скриптинга. Не используйте этот код, если вы не хотите, чтобы ваш сайт был взломан.См. [Все, что вам нужно знать о предотвращении уязвимостей, связанных с межсайтовыми сценариями в PHP) (https://paragonie.com/blog/2015/06/preventing-xss-vulnerabilities-in-php-everything-you-need-know) для введения в эту тему. –

-1

вы можете делать это сделать вместо

// Controllers 
test.controller('testController', ['<?php echo $scope; ?>', function($scope) { 

}]); 

я не использую angularJs, но независимо '$scope' бы грамматологический быть слово $scope

+0

Благодарим вас за ответ. Что делать, если мое приложение Angular находится в отдельном файле .js? –

+0

Передайте ему это как-то, трудно ответить, не зная, как вы их совмещаете, также, как и в практике, я бы избегал использовать переменные $ for JS, так как это смешивается в сочетании с PHP. – ArtisticPhoenix

+0

Какой смысл? Это не поможет получить данные php '$ path' OP в области AngularJS –

2

Вы можете определить константу в теге скрипта на странице, генерируемой PHP:

<script type="text/javascript"> 
    angular.module('testApp').constant('path', '<?php echo $path ?>'); 
</script> 

И в ваше приложение конфигурации:

// Routes 
test.config(function($routeProvider, path) { 
    $routeProvider 
    .when('/', { 
     templateUrl: path + '/pages/display.htm', 
     controller: 'testController' 
    }) 
}); 

Если path содержит любой контент, предоставленный пользователем, обязательно избегайте его для эха в качестве строки javascript.

+0

Это может не сработать, если код JS завернут в 'function ($) {$ (document) .ready (...);}) (jQuery); 'type block, то вам придется привязать его к чему-то глобальному, как окно. – ArtisticPhoenix

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