我想要做的是推迟加载指令的角度 js 模板,直到我真的需要它。我什至可能根本不需要它。有没有一种方法可以仅在需要时才加载指令的模板。服务会是做到这一点的方法吗?我的应用程序已经加载了很多指令模板,除非我需要,否则我想避免加载太多东西。手头的确切问题是为登录表单加载模板。如果用户点击一个按钮并且他/她没有登录我想slideOpen(使用jQuery)一个登录表单。
问问题
8254 次
2 回答
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 。
于 2013-02-16T18:37:13.557 回答
1
你为什么不尝试并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
仅当您需要加载指令时,范围变量才为真。
于 2016-11-24T06:59:42.823 回答