AngularJS с маршрутом и API JSON


Я пытался использовать AngularJS с плагином JSON API. У меня нет ошибки, но маршрут не работает, и на странице не печатаются части/...?

Я изменил постоянные ссылки на %postName%.

Я использую MAMP, и моя ссылка: http://localhost:8888/angular-wp.

Содержимое JSON работает: http://localhost:8888/angular-wp/api/get_posts/

В маршрутной области было два пустых значения.

Main.html

<p>main</p>
<a href='/demo'>This links to /demo</a>
<ul>
  <li ng-repeat='post in posts'>
    <a href='{{post.slug}}'>{{post.title}}</a>
  </li>
</ul>

Demo.php

{{post.content}}
<p>demo :)</p>

Index.php

<!DOCTYPE html>
<html lang='en' ng-app='app'>
<head>
    <meta charset='UTF-8' />
    <title>hooo</title>
</head>
<body>
  <header>
    <h1>
      <a href='/'>Worcamp 2014</a>
    </h1>
  </header>

  <div ng-view>TODO: have angular infect the content here via ajax</div>

  <footer>&copy; <?php echo date('Y'); ?> worcamp</footer>

  <script src='<?php echo get_template_directory_uri(); ?>/bower_components/angular/angular.js'></script>
  <script src='<?php echo get_template_directory_uri(); ?>/bower_components/angular-route/angular-route.js'></script>
<script type='text/javascript'>
  <?php $pathTheme = get_template_directory_uri(); ?>
  angular.module('app', ['ngRoute'])
    .config(function($routeProvider, $locationProvider) {
      $locationProvider.html5Mode(true);

      $routeProvider
        .when('/', {
          templateUrl: '<?php echo $pathTheme; ?>/partials/main.html',
            controller: 'Main'
        })
        .when('/:slug', {
          templateurl:  
            '<?php echo $pathTheme; ?>/partials/demo.php',
            controller: 'Slug'
        });
        //.otherwise({ redirectTo: '/'});
      })
      .controller('Main', function($scope, $http, $routeParams){
        $http.get('/api/get_posts/').success(function(res) {
          $scope.posts = res.posts;
        });
      })
      .controller('Slug', function($scope, $http, $routeParams){
        $http.get('/api/get_posts/?slug=' + $routeParams.slug).success(function(res) {
          $scope.post = res.post;
        });
      });

</script>
</body>
</html>
Author: Gabriel, 2015-05-14

2 answers

Дважды проверьте, есть ли ошибка "nobase" в вашей консоли. Если да, то в соответствии с документацией AngularJS и fix.io (кредиты за этот ответ идут автору этого поста) базовый тег на помощь.

<html ng-app="app">
<head>
    <base href="/angular-wp/">
    <title>AngularJS Demo Theme</title>
<?php wp_head(); ?>

Пожалуйста, обратите внимание, что "/angular-wp/" в данном случае является подтекстом (тестовый URL-адрес похож на "http://localhost/angular-wp /"), вы должны заменить его соответствующим образом. Если вы установите неверный базовый href, вы получите ошибку, например это или это.

 1
Author: Pim Schaaf, 2015-06-11 08:57:30

Если вы думаете о переключении плагина: я использовал плагин "WP REST API" (который реализует WP API), а затем $http.get('WPURL/wp-json/posts', function (data, ...) {...}), это сработало идеально.

Вы получаете изображение, показанное в сообщениях, например, через data[post-index].featured_image.source, смотрите все свойства через console.log(data[0]).

 0
Author: lippoliv, 2015-06-11 09:16:09