Данные контроллера AngularJs не видны в директиве html

0

Я сделал логин, который выглядит так:

директивный логин

  (function() {
        'use strict';

        angular
            .module('lnjapp.login',[])
            .directive('login', login);

        function login() {
            var directive = {
                templateUrl: '/app/components/login/login.html',
                restrict: 'E',
                Controller: login.controller,
                controllerAs: 'vm'
            };
            return directive;
        }   
    })();

login.controller

(function() {
    'use strict';

    angular
        .module('lnjapp.login')
        .controller('loginController', loginController);

    function loginController()
    {
        var vm = this;
        vm.test = 'test';
    }
})();

login.html

        <div class="form-group pull-left">
            <label>
                <b>d{{ vm.test }}</b>
                <input type="checkbox" name="remember">&nbsp;&nbsp;&nbsp;&nbsp;Onhoud mij
            </label>
            <br>
            <a ng-href="#/wachtwoord/vergeten">Wachtwoord Vergeten?</a>
        </div>

В login.html vm.test пуст?

Что здесь может быть не так?

  • 0
    замените login.controller на 'loginController'
Теги:

3 ответа

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

Здесь есть два вопроса: 1. Имя контроллера неверно в директиве 2. Имя контроллера должно быть в одинарных кавычках

Попробуйте под кодом:

(function() {
        'use strict';

        angular
            .module('lnjapp.login',[])
            .directive('login', login)
            .controller('loginController', loginController);

            function loginController()
            {
              var vm = this;
              vm.test = 'test';
            };

        function login() {
            var directive = {
                templateUrl: '/app/components/login/login.html',
                restrict: 'E',
                controller: 'loginController',
                controllerAs: 'vm'
            };
            return directive;
        }   
    })();
  • 0
    Спасибо, что работает. Но когда я помещаю контроллер в отдельный файл, это не так? Контроллер связан в моем index.html
  • 0
    Да, это может произойти, и причина в том, что когда вы создаете контроллер, это отдельный файл, поскольку вы создаете модуль 'lnjapp.login' в отдельном файле, поэтому может случиться так, что модуль 'lnjapp.login' недоступен, и мы создаем контроллер над ним. Поэтому, если вы решили поместить контроллеры и сервисы в другой файл, вам нужно будет убедиться, что перед добавлением контроллеров / сервисов над ним модуль создан и готов к использованию.
Показать ещё 2 комментария
0

в директиве in должно быть имя переменной, а не имя файла

  (function() {
    'use strict';

    angular
        .module('lnjapp.login',[])
        .directive('login', login);
    function loginController()
    {
       var vm = this;
       vm.test = 'test';
    }
    function login() {
        var directive = {
            templateUrl: '/app/components/login/login.html',
            restrict: 'E',
            Controller: loginController,
            controllerAs: 'vm'
        };
        return directive;
    }   
})();
0

Чтобы получить доступ к данным контроллера из представления, вы должны привязать его к области. Таким образом, в вашем случае вы должны использовать user $scope.vm = "test"; и в представлении используйте только {{vm}} который должен делать трюк, насколько я могу видеть.

Для получения дополнительной информации о двухсторонней привязке данных AngularJS см. Https://docs.angularjs.org/tutorial/step_04

Ещё вопросы

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