0

Я получаю WARNING: Tried to load angular more than once. при попытке использовать вложенные виды в Ruby on Rails и Angular app. Я использую ui-router и угловые рельсы-шаблоны.AngularJS загрузка более одного раза при использовании вложенных состояний

Угловые конфигурации и контроллеры:

var app = angular.module('app', ['ui.router', 'templates']); 

app.factory('categories', ['$http', function($http) { 
    var o = { 
     categories: [] 
    }; 
    o.get = function (id) { 
    return $http.get('/categories/' + id + '.json').then(function (res) { 
     return res.data; 
    }); 
    }; 
    return o; 
}]); 

app.config([ 
    '$stateProvider', 
    '$urlRouterProvider', 
    function($stateProvider, $urlRouterProvider) { 

    $stateProvider 
    .state('home', { 
     url: '/home', 
     templateUrl: 'home/_home.html', 
     controller: 'MainCtrl', 
    }); 
    $stateProvider 
    .state('home.categories', { 
     url: '/categories/:categoryId', 
     templateUrl: 'categories/_categories.html', 
     controller: 'CategoriesCtrl', 
     resolve: { 
      category: ['$stateParams', 'categories', function($stateParams, categories) { 
       return categories.get($stateParams.categoryId); 
      }] 
     } 
    }); 
    $urlRouterProvider.otherwise('/home'); 
    }]); 


app.controller('MainCtrl', function ($state) { 
    $state.transitionTo('home.categories'); 
}); 

app.controller('CategoriesCtrl', [ 
    '$scope', 
    'categories', 
    'category', 
    function($scope, categories, category) { 
     $scope.posts = category.posts; 
    } 
]); 

И шаблоны:

_home.html (*edited: удален body и ng-app из этого шаблона, следуя @apneadiving советы, и использовать правильный путь, как указывалось by @Pankaj Теперь, виды отображаются правильно, но 'loading more than once' не поддерживается)

<a href="#/home/categories/1">Category One</a> 
    <a href="#/home/categories/2">Category Two</a> 
    <ui-view></ui-view> 

_categories.html

<ul ng-repeat="post in posts"> 
    <li>{{post.title}}</li> 
</ul> 

приложение/просмотров/макеты/application.html.erb

<!--<rails head>--> 
<body ng-app="app"> 
    <ui-view></ui-view> 
</body> 

Что происходит в том, что государство 'дом' появляется и когда я нажимаю на ссылки, по URL но ничего больше не происходит. И я получаю сообщение о том, что Angular загружается более одного раза.

EDITED: Получил его работу. Это был конфликт <%= yield %> в другой части приложения, который не должен иметь ничего общего с угловой частью.

+0

Вы уверены, что у вас есть только один нг-приложение? – apneadiving

ответ

2

Как вы определили, дочерние состояния, вы должны изменить свой URL-адрес на /home, поскольку они являются дочерними элементами состояния home, URL-адрес наследуется от родительского состояния.

<a href="#/home/categories/1">Category One</a> 
<a href="#/home/categories/2">Category Two</a> 
+0

спасибо! который работал для отображения вложенного представления. однако я все еще получаю «предупреждение» о загрузке углов более одного раза. Я следил за советом @apneadiving и удалял 'body' из' _home.html'. 'ng-app' используется только один раз, на' application.html.erb' – user3097405

1

Вы не должны загружать свое приложение в шаблон, как и вы.

Добавить ng-app в ваш HTML-х body и удалить его из шаблона (на самом деле ваш шаблон не должен иметь тело либо)

+0

спасибо! Я изменил это, но не повезло с «загрузкой более одного раза». – user3097405

+0

, тогда у вас есть другое ng-приложение где-то, оно не должно появляться ни в одном шаблоне – apneadiving

+0

nope =/Я работаю только с '_home.html' и' _categories.html' на данный момент ... У меня теперь есть 'ng- app' on 'application.html.erb'. – user3097405