У меня есть php-файл с кучей угловатых вещей, и он работает нормально, когда я включаю его напрямую, однако, как только я включаю этот php-файл через $ http, вот так:
$http.get('include/step'+step+'.php').
success(function(data, status, headers, config) {
$("#tab_"+step).html(data);
});
Он перестает работать, тогда я вижу, что такие вещи, как: {{category.title}} и т. Д., Отображаются как текст, а не как его значение.
Я начинаю с angular и пытаюсь просто заставить angular распознавать код, добавляемый через ответ ajax или просто ответ $ http.
Я тоже пытался делать
но я получил этот angular.bootstrap (data);
Error: [ng:areq] Argument 'eventCatCtrl' is not a function, got undefined
eventCatCtrl был первым из моих контроллеров в этом файле, который был сгенерирован через $ http.
Я также сделал это angular.bootstrap (data, [‘eventApp’]); eventApp — это название моего основного модуля.
Просто для информации, все эти http-вещи выполняются внутри div, и я определил мой модуль для тела, если это имеет значение.
По запросу больше кода:
Функция вызывается из этого:
<div class="form-group progress-tracker__buttons" ng-controller="StepChange">
<input type="button" class="btn btn-primary btn-save" value="Save">
<input type="button" class="btn btn-default btn-next disabled" value="Next" ng-click="changeStep($event)">
<div class="last-saved">Last saved: Not saved yet</div>
</div>
Вот мой модуль, контроллер и функция:
var eventApp = angular.module('eventApp', []);
eventApp.controller('StepChange', function($scope, $http){
$scope.changeStep = function($event){
$http.get('include/step2.php').
success(function(data, status, headers, config) {
$("#tab_2").html(data);
});
};
});
В моем файле step2.php у меня есть эта часть:
<div class="panel-group form-group sortable" id="catAccordion" ng-controller="eventCatCtrl">
<div ng-repeat="category in categories.list">
<p>{{category.title}}</p>
</div>
</div>
У меня есть фабрика как таковая:
eventApp.factory('EventCategories', function () {
var EventCategories = {};
EventCategories.list = [
{
name: "Robert Downey Jr.",
character: "Tony Stark / Iron Man"},
{
name: "Chris Evans",
character: "Steve Rogers / Captain America"}
];
return EventCategories;
});
И у меня есть такой контроллер для этой фабрики:
eventApp.controller("eventCatCtrl", function($scope, EventCategories){
$scope.categories = EventCategories;
});
Вы не можете инициализировать контроллер после того, как angular был загружен. Из-за этого вы получаете сообщение об ошибке
Error: [ng:areq] Argument 'eventCatCtrl' is not a function, got undefined
Также, $http.get
следует использовать для сохранения / извлечения данных. Для включения других макетов и пользовательских интерфейсов вы должны использовать шаблоны и директивы. Вы сможете управлять отображением встроенного HTML-содержимого с помощью переменных в $scope
,
http://ify.io/lazy-loading-in-angularjs/
Кроме того, вам нужно будет предоставить сервис регистрации контроллера, например:
eventApp.config(['$controllerProvider', function($controllerProvider) {
eventApp.controllerProvider = $controllerProvider;
}]);
И, где вы регистрируете контроллер, используйте следующее:
eventApp.controllerProvider("eventCatCtrl", function($scope, EventCategories){
$scope.categories = EventCategories;
});
Других решений пока нет …