Подтвердить что ты не робот

Аргумент Angularjs не является функцией, получившей строку

Я новичок в angularjs. Я создаю приложение, где моя домашняя страница будет иметь список сообщений. Я думал об использовании angularjs для двусторонней привязки только для этой страницы. Я начал с примера страницы, но сам столкнулся с проблемами.

Моя примерная страница. Я использую ng-app для этого div, так как я не хочу, чтобы angularjs взаимодействовали с любыми другими аспектами страницы.

<div ng-app="posts">
  <ul class="post_list" ng-controller="PostController">
    <li ng-repeat="post in posts">
    {{post.title}}
    {{post.description}}
    </li>
  </ul>
</div>

У меня есть файл app.js, который имеет

var app = angular.module('posts', []);

и файл postcontroller.js с

(function(angular, app) {
  // Define the Controller as the constructor function.
  console.log(app);
  console.log(angular);
  app.controller("PostController",["$scope"], function($scope) {
    $scope.posts = [
      {"title":"asdf", "description":"describe"},
      {"title":"second one", "description":"second describe"},
    ];
  });
})(angular, app);

Когда я загружаю свою домашнюю страницу. Я получаю

Ошибка: аргумент "PostController" не является функцией. получил строку [googlecdn path] angular.min.js: 16

Что мне здесь не хватает. Пожалуйста, помогите мне, поскольку я полностью смущен. Я новичок в angularjs, а также в javascript.

4b9b3361

Ответ 1

Проблема заключается в том, как вы объявляете свой контроллер. Вы должны сделать это, как показано ниже:

app.controller("PostController",["$scope", function($scope) {
    $scope.posts = [
      {"title":"asdf", "description":"describe"},
      {"title":"second one", "description":"second describe"},
    ];
  }]);

Обратите внимание, что второй аргумент представляет собой массив с строкой $scope и функцией в виде элементов массива. Это правильный синтаксис, который можно использовать для написания кода, гарантирующего безопасность.