我在我的项目中创建了一个工厂,如下所示,
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
}
为什么我不能使用工厂对象来清除模型?请帮帮我。
您在不复制的情况下分配对象
$scope.user = userFactory.userInitailValues;
对象将在分配期间保留引用。
如果一侧发生变化,另一侧将自动发生变化。
因此,当您在不使用副本的情况下进行分配时,您在形式上的更改也会在userInitailValues
中进行更改。最终在$scope.user
中重新分配$scope.user
。
试试这个
$scope.user = angular.copy(userFactory.userInitailValues);
只初始化一次值。然后$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/