Angular:如何重置映射到不同数据的表单元素

时间:2016-02-16 17:49:02

标签: javascript angularjs

我的角度应用已经>页面上有1个表单。每个表格都可以保存或重置。每个表单上的字段不一定映射到自己的数据对象。

例如,我有两个数据必须才能获得并单独保存。让我们调用json块,ab

HTML:

<form>
<input type="text" ng-model="a.foo"/>
<input type="text" ng-model="b.bar"/>
</form

<form>
<input type="text" ng-model="b.bar[0].baz"/>
<input type="text" ng-model="a.boo"/>
</form

如果第一个表单只映射到a而第二个表单映射到b,那么重置数据就很简单了。但我不想重置页面上所有表单的所有ab数据。我只想重置特定表单上表示的输入的特定数据字段。

我当前的逻辑主要是有效。取消时,我获取表单中的元素,获取其ng-model属性并根据ng-model字符串值动态重置ab上的属性。这似乎是“脏”的,加上它对某些使用$ index特殊变量的ng-model属性不起作用,因为在执行.attr()时attr值不会被angular解析。什么是最好的解决方案?每个表单的不同模型可以映射回原始数据吗?

2 个答案:

答案 0 :(得分:0)

  • 打开表单时编辑正在编辑的对象的深层副本并进行编辑(angular.extend)

  • 保存时只使用保存逻辑

  • 取消后您将无需执行任何操作

e g

$script:YLUserCSV = Import-CSV "c:\ylusers.csv"
$result = Test-Path "c:\\ylusers.csv"
    if($result -eq $FALSE){
    Write-Host "Path to CSV does not exist: \\$env:computername\c$\ylusers.csv"
    break
}
}

Function Analyze-UserAuthentication{

foreach ($row in $script:YLUserCSV){
    write-host "$row.username" 
    if ($row.authenticationtype -eq "LDAP"){
        $script:LDAPUsers += $row.username
    }
    elseif ($row.authenticationtype -eq "DATABASE"){
        $script:DBUsers += $row.username
    }
}
}

Function Check-DBUsers {
Write-Host "`nChecking accounts that use database authentication..." -     ForegroundColor Yellow
$DBUsersInAD = @("`n")

foreach ($user in $script:DBUsers){
    $DBUserCheck = Get-QADUser $user
    if ($DBUserCheck -eq $NULL){
        Write-Host "No Active Directory user $user found."
    }
    elseif ($DBUserCheck -ne $NULL){
        $DBUsersInAD += $DBUserCheck.Name+"`n"
    }
    else {
        out-null
    }
}
    Write-Host "`nDatabase authenticated Yodle Live users associated with AD accounts:" -ForegroundColor Yellow
    Write-Host $DBUsersInAD | FL
}

Function Check-LDAPUsers {
Write-Host "`nChecking accounts that use LDAP authentication...-ForegroundColor Yellow
$LDAPUsersinAD = @("`n")
$inADandEnabled = @("`n")
$inADandDisabled = @("`n")
$notinAD = @("`n")

foreach ($user in $script:LDAPUsers){
    $LDAPUserCheck = Get-QADUser $user
    if ($LDAPUserCheck -ne $NULL){
        $LDAPUsersinAD += $LDAPUserCheck.Name+"`n"
        if ($LDAPUserCheck.AccountIsDisabled -ne $TRUE){
            $inADandEnabled += $LDAPUserCheck.Name+"`n"
        }
        elseif ($LDAPUserCheck.AccountIsDisabled -eq $TRUE){
            $inADandDisabled += $LDAPUserCheck.Name+"`n"
        }
    }
    else {
        $notinAD += $user+"`n"
        $LDAPUserCheck = $NULL
    }
}
Write-Host "`nEnabled Yodle Live accounts associated with disabled AD Users:" -ForegroundColor Yellow
Write-Host $inADandDisabled | FL
Write-Host "`nEnabled Yodle Live accounts not associated with any AD User:" -ForegroundColor Yellow
Write-Host $notinAD | FL
}
Set-ScriptVars
Import-UserData
Analyze-UserAuthentication
Check-DBUsers
Check-LDAPUsers

答案 1 :(得分:0)

我之前没有这样做过,但你可以试试下面的内容:

Error
SQL query: Documentation


GRANT SELECT ON mysql.host TO 'pma'@'localhost'
MySQL said: Documentation

#1146 - Table 'mysql.host' doesn't exist

可以轻松引用特定于表单的元素。然后,要重置,您只需使用<form> <input type="text" ng-model="form1.element1" ng-change="a.foo=form1.element1"/> <input type="text" ng-model="form1.element2" ng-change="b.bar=form1.element2"/> </form> <form> <input type="text" ng-model="form2.element1" ng-change="b.bar[0].baz=form2.element1"/> <input type="text" ng-model="form2.element2" ng-change="a.boo=form2.element2"/> </form> 重置form1form2个对象的初始值。

使用这种方法可能需要注意的一件事是,一旦输入一些值并重置,虽然angular.copy()form1将被重置,但form2中仍可能存在值和a对象,你可能想要处理它(例如禁用提交)