Функция в контроллере не срабатывает

0

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

Я пытаюсь загрузить список "Страны" с помощью контроллера, и все, кажется, идет хорошо, никаких ошибок, никаких предупреждений, он загружает модуль и попадает в угловой контроллер, но он никогда не попадает в функцию/не переходит в код внутри функции контроллера. Я что-то упускаю? Я делаю что-то неправильно?

Register.cshtml

<div ng-app="RegisterApp" class="form-group" ng-controller="CountriesController as CountriesCtrl">
    <label class="input-desc">Country</label>
    <select ng-model="country" 
      ng-options="country.Id as country.Name for country in countries">
        <option value="{{CountriesCtrl.country.Id}}">{{CountriesCtrl.country.Name}}</option>
    </select>
</div><!-- End .from-group -->

RegisterApp.js

var app = angular.module("RegisterApp", []);

CountriesService.js

/// <reference path="../App.js" />

angular.module("RegisterApp").service("CountriesService", function ($http) {
    this.getCountries = function () {
        return $http({
            method: "Get",
            url: "/Account/GetCountries"
        });
    };
});

CountriesController.js

/// <reference path="../Services/CountriesService.js" />

angular.module("RegisterApp").controller("CountriesController", function ($scope, CountriesService) {
    getCountries();

    function getCountries() {
        CountriesService.getCountries()
            .success(function (data, status, headers, config) {
            $scope.countries = data;
            $scope.country = $scope.countries[0];
        })
            .error(function (data, status, headers, config) {
            $scope.message = 'Unexpected Error';
        });
    }
});

Edit: Перемещено ng-приложение, было ошибочно скопировано таким образом, было изменение, которое я сделал, чтобы попробовать что-то перед отправкой q, извините за это

  • 0
    Попробуйте использовать app.service и app.controller вместо angular.module("RegisterApp").service... А также посмотрите ответ Шарикова, если вам не хватает директивы ng-app
  • 0
    Спасибо за ответ @Arg0n Arg0n, изменил его обратно, чтобы использовать его, как было изначально, и изменил директиву ng-app, все еще не ходя, он попадает в контроллер, успешно регистрирует его, но просто пропускает код внутри нет ошибки или даже предупреждения. Возможно, есть еще идеи? Буду очень признателен!
Показать ещё 1 комментарий
Теги:
angularjs-controller

2 ответа

0
Лучший ответ

ng-app необходимо зарегистрировать до ng-controller (или на том же элементе). Вы зарегистрировали его в дочернем элементе (select) для элемента с ng-controller

Измените свой HTML-код на:

<div ng-app="RegisterApp" class="form-group" ng-controller="CountriesController as CountriesCtrl">
    <label class="input-desc">Country</label>
    <select ng-model="country" 
      ng-options="country.Id as country.Name for country in countries">
        <option value="{{CountriesCtrl.country.Id}}">{{CountriesCtrl.country.Name}}</option>
    </select>
</div>

Посмотрите на этот JSFiddle.

  • 0
    Огромное спасибо за вашу помощь и особенно за скрипку, которая помогла мне разобраться в корне проблемы. Теперь он работает правильно, кажется, моя регистрация двух модулей также вызвала проблему, как только я удалил это и внедрил ваше решение, все работало как надо. Спасибо Спасибо спасибо!
  • 0
    Нет проблем :), пожалуйста, upvote также!
Показать ещё 1 комментарий
0

Ваш код должен быть:

<div ng-app="RegisterApp">
   <!-- some beautiful html -->
   <div class="form-group" ng-controller="CountriesController as CountriesCtrl">
        <label class="input-desc">Country</label>
        <select ng-model="country" ng-options="country.Id as country.Name for country in countries">
            <option value="{{CountriesCtrl.country.Id}}">{{CountriesCtrl.country.Name}}</option>
        </select>
    </div>
    <!-- some beautiful html -->
</div>

Обратите внимание на использование директивы ngApp.

Кроме того, убедитесь, что все ваши зависимости введены правильно (я имею в виду блок <head>)

  • 0
    Спасибо за ответ, ng-приложение используется в div, я переместил его в select, чтобы посмотреть, изменит ли он что-нибудь, но не сделал, переместил его обратно сейчас, все еще не ходя. Что касается зависимостей, я изменил его с использования только контроллера в том же файле js, что и приложение, чтобы отделить его от службы, чтобы посмотреть, что-то изменится. Проблема заключается в том, что не выдается ошибка, он попадает в контроллер и, кажется, успешно регистрирует контроллер, а просто пропускает код внутри него. Что-нибудь еще, о чем вы можете подумать, может быть причиной этой проблемы?

Ещё вопросы

Сообщество Overcoder
Наверх
Меню