我正在使用gulp-angular-templatecache
将我的所有filename.view.html
文件转换为templates.js
文件。
然后我使用$stateProvider
创建状态,并使用$templateCache
提取模板,并使用抽象的“根”状态。
$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...');
}
}
})();
我尝试了几种不同的方法,但似乎没有一种方法可行:
.run(...)
部分,然后将其推入$templateCache
而不是template
,templateUrl
和templateProvider
的不同变体ng-controller
代替有没有人对如何解决此问题有任何建议?我已经把头发撕成了几个小时了!
答案 0 :(得分:0)
如何预加载模板:
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'
},
}
})
答案 1 :(得分:0)
事实证明,我在登录模板上使用了<form>
元素,出于某种原因,Angular确实喜欢这样。我猜错了我已经错误地实现了<form>
,以便它可以与Angular一起使用。
删除<form>
元素可以解决问题。