我在我的项目中创建了一个工厂,如下所示,
app.factory('userFactory', userFactory);
function userFactory() {
var userInitialValueSettings = {
UserId: '',
FullName: '',
Location: '',
Phone: '',
Ext: '',
Fax: '',
Email: '',
IsExternalUser: false,
Password: '',
UserMustChangePassword: false,
PasswordNeverExpires: false
}
return {
userInitailValues: userInitialValueSettings
}
}
我使用工厂的userInitialValues对象初始化我的一个范围对象,如下所示。
$scope.user = userFactory.userInitailValues;
我使用$ scope.user的属性作为一些输入文本框的模型。我的表格中有一个清晰的按钮。我需要在单击清除按钮时清除文本框。所以我在单击清除按钮时挂钩了以下功能。
$scope.cancelAddUserDialoge = function () {
$scope.user = userFactory.userInitailValues;
}
但是文本字段没有被清除。有什么问题?有谁能够帮我?如果我在清除按钮中使用以下方法单击并单独清除每个模型属性,则文本框将被清除。
function ResetUserModel() {
$scope.user.UserId= '',
$scope.user.FullName = '',
$scope.user.Location = '',
$scope.user.Phone = '',
$scope.user.Ext = '',
$scope.user.Fax = ''
$scope.user.Email = '',
$scope.user.IsExternalUser = false,
$scope.user.Password = '',
$scope.user.UserMustChangePassword =false,
$scope.user.PasswordNeverExpires =false
}
为什么我不能使用工厂对象来清除模型?请帮帮我。
答案 0 :(得分:1)
您正在分配对象而不复制它
$scope.user = userFactory.userInitailValues;
对象将在分配期间保持参考。
如果更改了一侧,则另一侧将自动更改。
因此,当您在不使用副本的情况下进行分配时,您在表单中的更改也会在userInitailValues
中进行更改。最终,您要在$scope.user
中重新分配$scope.user
。
试试这个
$scope.user = angular.copy(userFactory.userInitailValues);
答案 1 :(得分:1)
您只能初始化一次值。然后$scope.user
会链接到值,您可以直接更改这些值。我建议你下一步创建初始数据:
app.factory('userFactory', userFactory);
function userFactory() {
return {
init : function() {
return {
UserId: '',
FullName: '',
Location: '',
Phone: '',
Ext: '',
Fax: '',
Email: '',
IsExternalUser: false,
Password: '',
UserMustChangePassword: false,
PasswordNeverExpires: false
};
}
};
}
然后在你的控制器初始化数据
$scope.user = userFactory.init();
并重置
$scope.cancelAddUserDialoge = function () {
$scope.user = userFactory.init();
}
这里是固定的小提琴http://jsfiddle.net/takf64v6/