我想要做的是推迟加载角度js模板的指令,直到我真的需要它。我甚至可能根本不需要它。有没有办法,我可以只加载模板的指令,如果我需要它。服务是否可以做到这一点?我的应用程序已经加载了很多指令模板,我想避免加载太多东西,除非我需要它。手头的确切问题是加载登录表单的模板。如果用户点击某个按钮并且他/她没有登录,我想slideOpen(使用jQuery)登录表单。等待加载angularjs指令模板
2
A
回答
6
在绝大多数情况下,动态加载静态指令模板没有任何价值。它们太小以至于无法做到这一点。但是,这是可能的。但是,大多数情况下,该策略用于动态模板。
它需要$http
来获取模板和$compile
将其连接到AngularJS。
app.directive('testDirective', function($http,$compile) {
return {
scope: { show: '&' },
link: function(scope, element, attrs) {
var tpl,
url = 'testDirective.tpl.html';
scope.$watch('show()', function (show) {
if (show) {
showTheDirective();
}
});
function showTheDirective() {
if (!tpl) {
$http.get(url).then(function (response) {
tpl = $compile(response.data)(scope);
element.append(tpl);
});
}
}
}
};
});
这里是一个Plunker演示它的工作原理。
0
为什么不试试,ng-if
上的指令。
<your-directive ng-if='userLoggedIn'></your-directive>
,并在控制器
app.controller('yourCtrl', function($scope, service){
$scope.dataHasLoaded = false;
service.yourUserLoginFuntion(params).then(function (data) {
//your login api
$scope.userLoggedIn = true
});
});
只有当你需要的指令来加载范围变量userLoggedIn
是真实的。
相关问题
- 1. AngularJS重新加载指令模板
- 2. Angularjs加载带指令的模板
- 3. AngularJs如何等待指令中的templateUrl的加载
- 4. 等待DOM是准备上AngularJS指令
- 5. AngularJS指令加载
- 6. Angularjs指令追加到模板
- 7. AngularJS - 模板:ngInclude指令
- 8. AngularJS指令模板Url
- 9. AngularJs指令,显示模板
- 10. Angularjs指令模板transclusion
- 11. 如何管理404错误加载指令模板AngularJS
- 12. angularjs - 如何从指令中从templateCache延迟加载模板
- 13. AngularJS - 预加载的模板不能使用指令
- 14. 使用ajax加载包含Angularjs指令的Django模板
- 15. AngularJS测试指令与Karma,Jasmine和ngHtml2JsPreprocessor:模板未加载
- 16. 后指令模板已经加载
- 17. 加载角度指令模板异步
- 18. 角指令不加载模板
- 19. Angularjs:指令加载顺序
- 20. 等待加载
- 21. 等待加载
- 22. AngularJS无法加载模板
- 23. 无法加载模板AngularJS
- 24. Selenium命令等待加载动态值
- 25. AngularJS指令模板不渲染
- 26. 将模板从ngRoute导入指令AngularJS
- 27. AngularJS指令将模板渲染两次
- 28. AngularJS指令在模板呈现时
- 29. AngularJS指令模板开头的注释
- 30. Angularjs指令与动态模板和transclude
它可以完成,但它需要一点工作。指令模板通常*非常小,我无法想象登录表单是微乎其微的。你为什么想要异步加载? – 2013-02-16 06:32:40
只是想知道是否有这样做的好方法。我同意登录表格很小,但我在想,如果这件事很容易做到的话,我会尽力去做。我应该补充一点,我并不害怕这些困难的事情,所以如果有这样做的方式我想知道,因为这会增加我对角度的总体理解。 – 2013-02-16 16:25:53