UI 使用 $templateCache 拉入视图时路由器控制器不工作?

UI Router controller not working when view is pulled in with $templateCache?

我正在使用 gulp-angular-templatecache 将我所有的 filename.view.html 文件转换为 templates.js 文件。

然后我使用 $stateProvider 创建我的状态,并使用 $templateCache 和抽象 "root" 状态引入模板。

$stateProvider
    .state('app', {
        abstract: true,
        template: '<div ui-view></div>'
    })
    .state('app.login', {
        url: '/login',
        template: $templateCache.get('components/login/login.html'),
        controller: 'LoginController as login'
    });

到目前为止一切正常。模板按应有的方式加载到我的页面中,但无论我做什么,我都无法让控制器工作。

我的模块和关联的控制器比较简单:

(function () {

    'use strict';

    angular
        .module('login', [])
        .controller('LoginController', LoginController);

    function LoginController () {

        var vm = this;

        vm.loginID = 'test';
        vm.password = 'test';

        vm.doLoginRequest = function () {
            console.log('Performing login request...');
        }

    }

})();

我尝试了几种不同的方法来解决这个问题,但 none 似乎奏效了:

有人对我如何解决这个问题有什么建议吗?我已经撕了好几个小时的头发了!

如何预加载模板:

1) 运行 你的任务,生成 template.js 视图

2) 在您的索引文件中,预加载所有模板

  <script src="build/templates.js"></script>

3) 将您的模块作为依赖项包含在内(自动任务通常会创建一个单独的模块,请务必检查模块的名称)

angular.module('app', ['templates'])

4) 在 app.config 部分只引用视图,就好像您在没有缓存的情况下加载它们一样

 .state('home', {
        url: '/home',
        views: {
            "@": {
                controller: 'homeController',
                templateUrl: 'app/views/home.html'

            },
        }

    })

事实证明,我在我的登录模板上使用了 <form> 元素,出于某种原因 Angular 确实喜欢它。我猜我错误地实现了 <form> 以使其与 Angular.

一起使用

删除 <form> 元素可解决问题。