当我尝试第三次从下拉列表中选择一个值时,我收到如下错误:
angular.js:9937 [$ rootScope:inprog] http://errors.angularjs.org/1.2.18/$rootScope/inprog?p0=%24digest
所选值不会在下拉列表中更新。
知道如何修复错误吗?
<select id="country" ng-model="quoteRequest.quotationRequestItems[0].localSite.countryCode3"
ng-options="country.countryCode3 as country.countryName for country in countries"
ng-class="{dropdowWithLongData:isBrowserIE()}"
ng-change="changeCountryName(quoteRequest.quotationRequestItems[0].localSite); updateBillingInSameCountryBlock();detectChange('countryName');updateLocalContact(quoteRequest.quotationRequestItems[0].localSite.countryCode3)"
name="countryName"
required={{!nextClicked}>
<option value=""></option>
</select>
$scope.changeCountryName = function (site) {
console.log(site.countryCode3 +"COUNTRY CODE");
site.countryName = $scope.countriesMap[site.countryCode3];
console.log(site.countryName +"COUNTRY NAME");
};
答案 0 :(得分:1)
诊断此错误
当您收到此错误时,诊断问题的原因可能相当令人生畏。最好的做法是调查错误中的堆栈跟踪。您需要查找已调用
import java.util.concurrent.TimeUnit; import org.openqa.selenium.By; import org.openqa.selenium.Keys; import org.openqa.selenium.WebDriver; import org.openqa.selenium.firefox.FirefoxDriver; import org.testng.annotations.BeforeTest; import org.testng.annotations.Test; import java.awt.Robot; import java.awt.event.KeyEvent; import java.awt.AWTException; public class Tabs { WebDriver driver; Robot rb; @BeforeTest public void setup() throws Exception { System.setProperty("webdriver.chrome.driver", "C:\\Users\\Anuja.AnujaPC\\Downloads\\chromedriver_win32\\chromedriver.exe"); WebDriver driver=new ChromeDriver(); driver.manage().window().maximize(); driver.manage().timeouts().implicitlyWait(5, TimeUnit.SECONDS); driver.get("http://qaautomated.com"); } @Test public void openTab() { //Open tab 2 using CTRL + t keys. driver.findElement(By.cssSelector("body")).sendKeys(Keys.CONTROL +"t"); //Open URL In 2nd tab. driver.get("http://www.qaautomated.com/p/contact.html"); //Call switchToTab() method to switch to 1st tab switchToTab(); //perform required actions on tab 1. driver.findElement(By.xpath("//input[@id='6']")).click(); driver.findElement(By.xpath("//input[@id='plus']")); driver.findElement(By.xpath("//input[@id='3']")); driver.findElement(By.xpath("//input[@id='equals']")); //Call switchToTab() method to switch to 2nd tab. switchToTab(); //Call switchToTab() method to switch to 1st tab switchToTab(); } public void switchToTab() { //Switching between tabs using CTRL + tab keys. driver.findElement(By.cssSelector("body")).sendKeys(Keys.CONTROL +"\t"); //Switch to current selected tab's content. driver.switchTo().defaultContent(); } @AfterTest public void closeTabs() throws AWTException { //Used Robot class to perform ALT + SPACE + 'c' keypress event. rb =new Robot(); rb.keyPress(KeyEvent.VK_ALT); rb.keyPress(KeyEvent.VK_SPACE); rb.keyPress(KeyEvent.VK_C); } }
或$apply
的位置,并找到发生此情况的上下文。应该有两个电话:
第一个电话是好
$digest
/$apply
,通常会被调用堆栈顶部附近的某个事件触发。第二个电话是错误的
$digest
/$apply
,这是要调查的电话。一旦你确定了这个电话,你就可以在堆栈中找到问题所在。
如果在您的应用程序代码中进行了第二次调用,那么您应该查看为什么在
$digest
/$apply
内调用此代码。这可能是一个简单的疏忽,也可能适合前面描述的同步/异步方案。如果第二次调用是在Angular指令内进行的,那么很可能它与前面描述的第二个编程事件触发器场景相匹配。在这种情况下,您可能需要进一步查看树,以便首先触发事件。
答案 1 :(得分:0)
在调用excute the digest error之前检查这个条件。
if($scope.$$phase)
{
site.countryName = $scope.countriesMap[site.countryCode3];
}