角不更新循环,由于执行$ mdDialog(材料设计) [英] Angular does not updated loop due to implementation $mdDialog (Material Design)
问题描述
:角循环没有更新,我更新了code稍微对话框添加到该按钮AA用户。
在我的app.js文件中唯一的变化是增加一个$ mdDialog框中的指令。因此,完整的code为我的app.js文件是:
VAR应用= angular.module('ADDUSER',['ngMaterial']);app.controller('AppCtrl',函数($范围,$ HTTP,$ mdDialog){
$ scope.userInfo = [];/ **功能添加细节在MySQL referecing PHP的用户** /
$ scope.save_user =功能(){
$ http.post('db.php中?行动= ADD_USER',
{
USER_NAME:$ scope.user_name,
USER_EMAIL':$ scope.user_email
}
) .success(功能(数据,状态,头,配置){
$ scope.userInfo.push(数据);
$ scope.get_user(); //这将获取从数据库最新记录
的console.log(用户已成功添加到数据库);
的console.log(数据);
}) .error(功能(数据,状态,头,配置){
的console.log(无法将用户添加到数据库);
});
}/ **函数来得到在mysql中引用PHP添加的用户信息** /
$ scope.get_user =功能(){
$ http.get('db.php中?行动= GET_USER')。成功(功能(数据)
{
$ scope.userInfo =数据;
的console.log(你是在显示用户信息succesfull);
// $ scope.get_user(); //这将获取从数据库最新记录
})
}/ **函数从列表中引用的PHP删除用户** /
$ scope.delete_user =功能(指数){
$ http.post('db.php中?行动= DELETE_USER',
{
USER_INDEX:指数
}
)
.success(功能(数据,状态,头,配置){
$ scope.get_user(); //这将获取从数据库最新记录
的console.log('缺失succesfull');
}) .error(功能(数据,状态,头,配置){
的console.log(你不是在删除用户succesfull);
});
}$ scope.showPopUp =功能(EV){
$ mdDialog.show({
控制器:DialogController,
templateUrl:popup.tmpl.html',
父:angular.element(document.body的)
targetEvent:EV,
})
};功能DialogController($范围,$ mdDialog){
$ scope.closeDialog =功能(){
$ mdDialog.hide();
} $ scope.save_user =功能(){
$ mdDialog.hide();
}
}});
我不得不注释掉GET_USER功能如下code($ scope.get_user();),否则我不能preform删除但在另一方面循环没有更新。所以无论是我注释掉$ scope.get_user()在去GET_USER功能,然后我可以删除用户或我就不做评论了出来,当我添加一个新用户,但随后删除功能不起作用循环将更新。 ..
我的html code是:
<机身NG控制器=AppCtrl>
< DIV>
< UL NG-的init =GET_USER()>
<李NG重复=用户用户信息> {{user.user_name}}< A HREF =#NG-
点击=DELETE_USER(user.id)> - >删除< / A>< /李>
< / UL>
< / DIV> < MD-button类=MD-主要MD-提出了NG点击=showPopUp($事件)灵活
柔性MD =100>添加一个用户LT; / MD-按钮>
< /身体GT;
和code的对话框(popup.tmpl.html)如下:
< MD-ARIA对话框标签=添加或邀请用户NG-应用=ADDUSER>
<形式NG控制器=AppCtrl>
< MD-工具栏>
< DIV CLASS =MD-工具栏工具>
< H2>添加或邀请用户LT; / H>
<跨度柔性>< / SPAN>
< MD-button类=MD-图标按钮NG点击=closeDialog()>
< MD-图标MD-SVG-SRC =图像/ ic_close_24px.svgARIA标签=关闭
对话>< / MD-图标>
< / MD-按钮>
< / DIV>
< / MD-工具栏>
< MD-对话框的内容>
< DIV>
其中p DIV布局=布局SM =列>
< MD-输入容器柔性=>
<标签>输入一个名称和LT; /标签>
<输入名称=USER_EMAILNG模型=USER_NAME>
< / MD-输入容器>
< / DIV>
其中p DIV布局=布局SM =列>
< MD-输入容器柔性=>
<标签>输入电子邮件和LT; /标签>
<输入名称=USER_NAMENG模型=USER_EMAIL>
< / MD-输入容器>
< / DIV>
< / DIV>
< / MD-表盘
< DIV CLASS =MD-行动布局=行>
< MD-NG按钮,点击=closeDialog()级=MD-小学>取消< / MD-
按钮>
< MD-NG按钮,点击=save_user()NAME =ADD_USER级=MD-
主要>添加< / MD-按钮>
< / DIV>
< /表及GT;
< / MD-对话框>
检查我的代码片段。
VAR应用= angular.module('ADDUSER',['ngMaterial']) ;\r
\r
app.run(['$ templateCache',\r
功能($ templateCache){\r
$ templateCache.put('popup.tmpl.html','< MD-ARIA对话框标签=添加或邀请用户NG-应用=ADDUSER>'+\r
'<形式NG控制器=AppCtrl>' +\r
'< MD-工具栏>' +\r
'< DIV CLASS =MD-工具栏工具>' +\r
'< H2>添加或邀请用户LT; / H>' +\r
'<跨度柔性>< / SPAN>' +\r
'< MD-button类=MD-图标按钮NG点击=closeDialog()>' +\r
'< MD-图标MD-SVG-SRC =图像/ ic_close_24px.svgARIA标签=关闭对话框>< / MD-图标>' +\r
'< / MD-按钮>' +\r
'< / DIV>' +\r
'< / MD-工具栏>' +\r
'< MD-对话框的内容和GT;' +\r
'< DIV>' +\r
'< DIV布局=布局SM =列>' +\r
'< MD-输入容器柔性=>' +\r
'<标签>输入一个名称和LT; /标签> +\r
'<输入名称=USER_EMAILNG模型=USER_NAME>' +\r
'< / MD-输入容器>' +\r
'< / DIV>' +\r
\r
'< DIV布局=布局SM =列>' +\r
'< MD-输入容器柔性=>' +\r
'<标签>输入电子邮件和LT; /标签> +\r
'<输入名称=USER_NAMENG模型=USER_EMAIL>' +\r
'< / MD-输入容器>' +\r
'< / DIV>' +\r
'< / DIV>' +\r
'< / MD-对话框的内容和GT;' +\r
'< DIV CLASS =MD-行动布局=行>' +\r
'< MD-NG按钮,点击=closeDialog()级=MD-小学>' +\r
取消+\r
'< / MD-按钮>' +\r
'< MD-NG按钮,点击=保存()NAME =ADD_USER级=MD-小学>' +\r
添加+\r
'< / MD-按钮>' +\r
'< / DIV>' +\r
'< /形式为GT;' +\r
'< / MD-对话框>');\r
\r
\r
}\r
]);\r
\r
app.factory('UsersService',['$ Q',\r
功能($ Q){\r
\r
变种服务= {};\r
service.data = [{\r
USER_NAME:堆栈溢出,\r
ID:1\r
}];\r
\r
service.get =功能(){\r
变种推迟= $ q.defer();\r
\r
deferred.resolve(service.data);\r
返回deferred.promise;\r
}\r
\r
service.save =功能(数据){\r
变种推迟= $ q.defer();\r
data.id = Math.floor((的Math.random()* 999)+ 111);\r
service.data.push(数据);\r
deferred.resolve();\r
返回deferred.promise;\r
}\r
service.delete =功能(用户){\r
变种推迟= $ q.defer();\r
警报('删除用户'+ user.id);\r
VAR指数= service.data.indexOf(用户);\r
service.data.splice(指数,1);\r
deferred.resolve();\r
返回deferred.promise;\r
\r
}\r
退换货服务;\r
}\r
]);\r
\r
app.controller('AppCtrl',函数($范围,$ HTTP,$ mdDialog,UsersService){\r
$ scope.userInfo = [];\r
\r
\r
功能getUsers(){\r
UsersService.get()。然后(功能(数据){\r
_this.userInfo =数据;\r
});\r
}\r
getUsers();\r
\r
this.showPopUp =功能(EV){\r
$ mdDialog.show({\r
控制器:DialogController,\r
templateUrl:popup.tmpl.html',\r
父:angular.element(document.body的)\r
targetEvent:EV,\r
})\r
};\r
\r
\r
this.delete_user =功能(用户){\r
UsersService.delete(用户)。然后(函数(){\r
getUsers();\r
\r
});\r
};\r
\r
$ scope.save =功能(){\r
VAR OBJ = {\r
USER_NAME:$ scope.user_name,\r
USER_EMAIL':$ scope.user_email\r
};\r
UsersService.save(OBJ)。然后(函数(){\r
getUsers();\r
$ mdDialog.hide();\r
});\r
}\r
\r
功能DialogController($范围,$ mdDialog){\r
$ scope.closeDialog =功能(){\r
$ mdDialog.hide();\r
}\r
\r
}\r
\r
VAR _this =这一点;\r
\r
});
\r
<!DOCTYPE HTML>\r
< HTML LANG =ENNG-应用=ADDUSER>\r
\r
< HEAD>\r
<间的charset =UTF-8/>\r
< META HTTP-EQUIV =X-UA-Compatible的内容=IE =边缘/>\r
< META NAME =视口CONTENT =WIDTH =设备宽度,初始规模= 1/>\r
<标题>测试1 - 添加用户LT; /标题>\r
<链接rel =stylesheet属性HREF =http://maxcdn.bootstrapcdn.com/bootstrap/3.3.4/css/bootstrap.min.css/>\r
<链接HREF =http://netdna.bootstrapcdn.com/font-awesome/2.0/css/font-awesome.css的rel =stylesheet属性/>\r
<链接rel =stylesheet属性HREF =https://ajax.googleapis.com/ajax/libs/angular_material/0.9.4/angular-material.min.css/>\r
<链接rel =stylesheet属性HREF =https://fonts.googleapis.com/css?family=RobotoDraft:300,400,500,700,400italic/>\r
<! - HTML5垫片和Respond.js对IE8的支持HTML5元素和媒体查询 - >\r
!< - 警告:如果你通过文件浏览页面Respond.js不起作用:// - >\r
<! - [如果LT IE 9] GT;\r
&所述; SCRIPT SRC =https://oss.maxcdn.com/html5shiv/3.7.2/html5shiv.min.js>&下; /脚本>\r
&所述; SCRIPT SRC =https://oss.maxcdn.com/respond/1.4.2/respond.min.js>&下; /脚本>\r
百分比抑制率ENDIF] - GT!;\r
< /头>\r
\r
<机身NG控制器=AppCtrl为_>\r
< DIV>\r
< UL>\r
<李NG重复=用户_.userInfo> {{user.user_name}} [{{user.id}}]< A HREF =#NG-点击=_ DELETE_USER(用户)> - >删除< / A>\r
< /李>\r
< / UL>\r
< / DIV>\r
< MD-button类=MD-主要MD-提出了NG-点击=_ showPopUp($事件)。柔性=柔性MD =100>\r
添加用户\r
< / MD-按钮>\r
<! - <按钮式=按钮ID =btnAddUser级=BTN BTN-主要>添加用户和LT; /按钮> - >\r
&所述; SCRIPT SRC =https://ajax.googleapis.com/ajax/libs/jquery/1.11.3/jquery.min.js>&下; /脚本>\r
&所述; SCRIPT SRC =http://maxcdn.bootstrapcdn.com/bootstrap/3.3.4/js/bootstrap.min.js>&下; /脚本>\r
&所述; SCRIPT SRC =https://ajax.googleapis.com/ajax/libs/angularjs/1.3.16/angular.min.js>&下; /脚本>\r
&LT;脚本src=\"https://ajax.googleapis.com/ajax/libs/angularjs/1.3.15/angular-animate.min.js\"></script>\r
&所述; SCRIPT SRC =https://ajax.googleapis.com/ajax/libs/angularjs/1.3.15/angular-aria.min.js&GT;&下; /脚本&GT;\r
&LT;脚本src=\"https://ajax.googleapis.com/ajax/libs/angular_material/0.9.4/angular-material.min.js\"></script>\r
&LT;脚本SRC =http://angular-ui.github.io/bootstrap/ui-bootstrap-tpls-0.6.0.js类型=文/ JavaScript的&GT;&LT; / SCRIPT&GT;\r
&LT;脚本SRC =JS / app.js&GT;&LT; / SCRIPT&GT;\r
&LT; /身体GT;
\r
Based on my previous post: Angular loop is not updating, i updated the code slightly to add a dialog box to the button a a user.
the only change in my app.js file is the directive to add a $mdDialog box. so the complete code for my app.js file is:
var app = angular.module('AddUser', ['ngMaterial']);
app.controller('AppCtrl', function($scope, $http, $mdDialog){
$scope.userInfo = [];
/** function to add details for a user in mysql referecing php **/
$scope.save_user = function() {
$http.post('db.php?action=add_user',
{
'user_name' : $scope.user_name,
'user_email' : $scope.user_email
}
)
.success(function (data, status, headers, config) {
$scope.userInfo.push(data);
$scope.get_user(); //this will fetch latest record from DB
console.log("The user has been added successfully to the DB");
console.log(data);
})
.error(function(data, status, headers, config) {
console.log("Failed to add the user to DB");
});
}
/** function to get info of user added in mysql referencing php **/
$scope.get_user = function() {
$http.get('db.php?action=get_user').success(function(data)
{
$scope.userInfo = data;
console.log("You were succesfull in showing user info");
//$scope.get_user(); //this will fetch latest record from DB
})
}
/** function to delete a user from list referencing php **/
$scope.delete_user = function(index) {
$http.post('db.php?action=delete_user',
{
'user_index' : index
}
)
.success(function (data, status, headers, config) {
$scope.get_user();//this will fetch latest record from DB
console.log('Deletion was succesfull');
})
.error(function(data, status, headers, config) {
console.log("You were NOT succesfull in deleting a user");
});
}
$scope.showPopUp= function(ev) {
$mdDialog.show({
controller: DialogController,
templateUrl: 'popup.tmpl.html',
parent: angular.element(document.body),
targetEvent: ev,
})
};
function DialogController($scope, $mdDialog) {
$scope.closeDialog = function() {
$mdDialog.hide();
}
$scope.save_user = function() {
$mdDialog.hide();
}
}
});
i had to comment out the following code in the get_user function ($scope.get_user();) otherwise i could not preform a delete but then on the other hand the loop did not update. so either i comment out $scope.get_user() in de get_user function and then i can delete a user or i don't comment it out and the loop will update when i add a new user but then the delete function does not work ...
my html code is:
<body ng-controller="AppCtrl">
<div>
<ul ng-init="get_user()">
<li ng-repeat="user in userInfo ">{{user.user_name}}<a href="#" ng-
click="delete_user(user.id)"> --> Delete</a></li>
</ul>
</div>
<md-button class="md-primary md-raised" ng-click="showPopUp($event)" flex
flex-md="100">Add a user</md-button>
</body>
and the code for the dialog box (popup.tmpl.html) is the following:
<md-dialog aria-label="Add or invite a user" ng-app="AddUser">
<form ng-controller="AppCtrl">
<md-toolbar>
<div class="md-toolbar-tools">
<h2>Add or invite a user</h2>
<span flex></span>
<md-button class="md-icon-button" ng-click="closeDialog()">
<md-icon md-svg-src="images/ic_close_24px.svg" aria-label="Close
dialog"></md-icon>
</md-button>
</div>
</md-toolbar>
<md-dialog-content>
<div>
<div layout="" layout-sm="column">
<md-input-container flex="">
<label>Enter a name</label>
<input name="user_email" ng-model="user_name">
</md-input-container>
</div>
<div layout="" layout-sm="column">
<md-input-container flex="">
<label>Enter an e-mail</label>
<input name="user_name" ng-model="user_email">
</md-input-container>
</div>
</div>
</md-dial
<div class="md-actions" layout="row">
<md-button ng-click="closeDialog()" class="md-primary">Cancel</md-
button>
<md-button ng-click="save_user()" name="add_user" class="md-
primary">Add</md-button>
</div>
</form>
</md-dialog>
Check my snippet.
var app = angular.module('AddUser', ['ngMaterial']);
app.run(['$templateCache',
function($templateCache) {
$templateCache.put('popup.tmpl.html', '<md-dialog aria-label="Add or invite a user" ng-app="AddUser">' +
'<form ng-controller="AppCtrl">' +
'<md-toolbar>' +
'<div class="md-toolbar-tools">' +
'<h2>Add or invite a user</h2>' +
'<span flex></span>' +
'<md-button class="md-icon-button" ng-click="closeDialog()">' +
'<md-icon md-svg-src="images/ic_close_24px.svg" aria-label="Close dialog"></md-icon>' +
'</md-button>' +
'</div>' +
'</md-toolbar>' +
'<md-dialog-content>' +
'<div>' +
'<div layout="" layout-sm="column">' +
'<md-input-container flex="">' +
'<label>Enter a name</label>' +
'<input name="user_email" ng-model="user_name">' +
'</md-input-container>' +
'</div>' +
'<div layout="" layout-sm="column">' +
'<md-input-container flex="">' +
'<label>Enter an e-mail</label>' +
'<input name="user_name" ng-model="user_email">' +
'</md-input-container>' +
'</div>' +
' </div>' +
'</md-dialog-content>' +
'<div class="md-actions" layout="row">' +
'<md-button ng-click="closeDialog()" class="md-primary">' +
'Cancel' +
'</md-button>' +
'<md-button ng-click="save()" name="add_user" class="md-primary">' +
'Add' +
'</md-button>' +
'</div>' +
'</form>' +
'</md-dialog>');
}
]);
app.factory('UsersService', ['$q',
function($q) {
var service = {};
service.data = [{
user_name: 'Stack Overflow',
id: 1
}];
service.get = function() {
var deferred = $q.defer();
deferred.resolve(service.data);
return deferred.promise;
}
service.save = function(data) {
var deferred = $q.defer();
data.id = Math.floor((Math.random() * 999) + 111);
service.data.push(data);
deferred.resolve();
return deferred.promise;
}
service.delete = function(user) {
var deferred = $q.defer();
alert('deleting user ' + user.id);
var index = service.data.indexOf(user);
service.data.splice(index, 1);
deferred.resolve();
return deferred.promise;
}
return service;
}
]);
app.controller('AppCtrl', function($scope, $http, $mdDialog, UsersService) {
$scope.userInfo = [];
function getUsers() {
UsersService.get().then(function(data) {
_this.userInfo = data;
});
}
getUsers();
this.showPopUp = function(ev) {
$mdDialog.show({
controller: DialogController,
templateUrl: 'popup.tmpl.html',
parent: angular.element(document.body),
targetEvent: ev,
})
};
this.delete_user = function(user) {
UsersService.delete(user).then(function() {
getUsers();
});
};
$scope.save = function() {
var obj = {
'user_name': $scope.user_name,
'user_email': $scope.user_email
};
UsersService.save(obj).then(function() {
getUsers();
$mdDialog.hide();
});
}
function DialogController($scope, $mdDialog) {
$scope.closeDialog = function() {
$mdDialog.hide();
}
}
var _this = this;
});
<!DOCTYPE html>
<html lang="en" ng-app="AddUser">
<head>
<meta charset="utf-8" />
<meta http-equiv="X-UA-Compatible" content="IE=edge" />
<meta name="viewport" content="width=device-width, initial-scale=1" />
<title>Test 1 - Add user</title>
<link rel="stylesheet" href="http://maxcdn.bootstrapcdn.com/bootstrap/3.3.4/css/bootstrap.min.css" />
<link href="http://netdna.bootstrapcdn.com/font-awesome/2.0/css/font-awesome.css" rel="stylesheet" />
<link rel="stylesheet" href="https://ajax.googleapis.com/ajax/libs/angular_material/0.9.4/angular-material.min.css" />
<link rel="stylesheet" href="https://fonts.googleapis.com/css?family=RobotoDraft:300,400,500,700,400italic" />
<!-- HTML5 shim and Respond.js for IE8 support of HTML5 elements and media queries -->
<!-- WARNING: Respond.js doesn't work if you view the page via file:// -->
<!--[if lt IE 9]>
<script src="https://oss.maxcdn.com/html5shiv/3.7.2/html5shiv.min.js"></script>
<script src="https://oss.maxcdn.com/respond/1.4.2/respond.min.js"></script>
<![endif]-->
</head>
<body ng-controller="AppCtrl as _">
<div>
<ul>
<li ng-repeat="user in _.userInfo ">{{user.user_name}} [{{user.id}}]<a href="#" ng-click="_.delete_user(user)"> --> Delete</a>
</li>
</ul>
</div>
<md-button class="md-primary md-raised" ng-click="_.showPopUp($event)" flex="" flex-md="100">
Add a user
</md-button>
<!-- <button type="button" id="btnAddUser" class="btn btn-primary">Add User</button> -->
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.3/jquery.min.js"></script>
<script src="http://maxcdn.bootstrapcdn.com/bootstrap/3.3.4/js/bootstrap.min.js"></script>
<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.3.16/angular.min.js"></script>
<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.3.15/angular-animate.min.js"></script>
<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.3.15/angular-aria.min.js"></script>
<script src="https://ajax.googleapis.com/ajax/libs/angular_material/0.9.4/angular-material.min.js"></script>
<script src="http://angular-ui.github.io/bootstrap/ui-bootstrap-tpls-0.6.0.js" type="text/javascript"></script>
<script src="js/app.js"></script>
</body>
这篇关于角不更新循环,由于执行$ mdDialog(材料设计)的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!