这是一个两部分问题:
我的网页上有一个空div
<div class="row-fluid">
<div id="SLR" ng-controller="userMenuController">
//Angular inject HTML here
</div>
</div>
我的理解是ng-Controller导致执行以下功能:
app.controller('userMenuController', ['$scope', function($scope, authFactory){
$scope.init = function(authFactory) {
var menu = authFactory.getLoginModuleHtml()($scope);
$("#SLR").html(menu);
};
$scope.init();
My First问题是即使authFactory作为依赖项注入控制器仍然未定义,因此我的init()函数失败。为什么是这样?这是我的工厂:
app.factory('authFactory', function(){
var factory = {};
factory.getLoginModuleHtml = function(){
var html = '';
if(userLoggedIn){
html =
'<div class="row-fluid" ng-controller="loginMenuController">' +
'<div class="dropdown">' +
'Hi user!' +
'</div>';
} else {
html =
'<div class="row-fluid" ng-controller="loginMenuController">' +
'<div class="dropdown">' +
'Click to login!' +
'</div>';
}
return html
}
return factory;
});
我的第二个问题是,我是否以正确的方式将HTML放在页面上?
感谢您的帮助。
答案 0 :(得分:2)
第一个回答:
你没有正确地注射你的工厂,它应该是这样的:
app.controller('userMenuController', ['$scope','authFactory', function($scope, authFactory){
$scope.init = function(authFactory) {
var menu = authFactory.getLoginModuleHtml()($scope);
$("#SLR").html(menu);
};
$scope.init();
}]);
对于第二个,答案是否,你永远不应该从你的控制器处理html标签,总是使用指令。
在您的情况下,如果用户已登录或未记录,您的html正在更改,我建议使用基于路由的解决方案,以便您可以在必要时将用户重定向到登录路由,并且仅允许用户在他/她正确登录时查看其他页面。