我正在尝试使用AngularJS创建一个小型应用程序,它由用户和用户分别发布的问题组成。
我试图在单击特定用户时显示问题。
到目前为止,我已经创建了以下代码:
index.html
<div class="container" ng-controller="issueContainer as issueTrack">
<div class="leftContainer" ng-controller="issueForm as issueformCtrl">
<issue-form></issue-form>
<user-issues ng-repeat="issue in user.issues"></user-issues>
</div>
<div class="rightContainer" ng-controller="userForm as userformCtrl">
<form name="userform" ng-submit="userform.$valid && userformCtrl.addUsers()">
<div class="form-group">
<label for="addUser">Username</label>
<input type="text" id="addUser" ng-model="userformCtrl.name" class="form-control" placeholder="Username">
</div>
<div class="form-group">
<input type="submit" class="btn btn-primary" value="Submit" />
</div>
</form>
<h3 class="usersTitle">Users</h3>
<div class="users" ng-show="issueTrack.users.length">
<div ng-repeat="user in issueTrack.users track by $index" value="{{user.username}}" ng-click="userformCtrl.userclickCtrl(user.username)">
{{user.username}}
</div>
</div>
</div>
</div>
app.js
(function(){
var app = angular.module("Issuetracker",[]);
var users=[];
if (localStorage.getItem('users')!==null){
users = JSON.parse(localStorage.getItem("users"));
console.log(users);
}
app.controller("issueContainer", function(){
var issuetrack = this;
this.users = users;
});
app.controller("userForm", function(){
this.addUsers = function(){
users.push({'username':this.name, 'issues':[]});
this.name='';
console.log(users);
localStorage.setItem("users", JSON.stringify(users));
};
this.userclickCtrl= function(data){
var allUsers = JSON.parse(localStorage.getItem("users"));
for(var i=0;i< allUsers.length;i++){
if(allUsers[i].username == data){
var userData = allUsers[i];
break;
}
}
};
});
app.controller("issueForm", function(){
this.issue={};
this.addIssues = function(){
console.log(this.issue);
var allUsers = JSON.parse(localStorage.getItem("users"));
for(var i=0;i< allUsers.length;i++){
if(allUsers[i].username == this.issue.User){
allUsers[i].issues.push(this.issue);
break;
}
}
this.issue={};
localStorage.setItem("users", JSON.stringify(allUsers));
};
});
app.directive("userIssues", function(){
return{
restrict: 'E',
templateUrl: 'userissues.html'
}
});
app.directive("issueForm", function(){
return{
restrict: 'E',
templateUrl: 'issueform.html'
}
});
})()
userissues.html
<div class="issues">
<div ng-repeat="issue in user.issues">
<h3>{{issue.Summary}}<span class="label label-primary" style="margin-left:2%">{{issue.Type}}</span></h3>
<p>{{issue.Description}}</p>
</div>
</div>
每当单击任何用户时,都会在其中从
localStrorage
获取用户对象并将其传递给模板的userissues指令的地方调用userclickCtrl函数。任何线索将不胜感激!!!
最佳答案
不知道我是否遇到您的问题,但这也许是可能的解决方案。
您可以通过以下方式将问题作为参数传递给指令:
app.directive(“ userIssues”,function(){
返回{
restrict: 'E',
scope: { issue: '=' },
templateUrl: 'userissues.html'
}
});
您可以像这样使用它:
<user-issues ng-repeat="issue in issues" issue="issue"></user-issues>
试试这个fiddle作为例子
希望这就是你所需要的