从下拉列表中选择值时的摘要错误

时间:2017-01-11 06:54:28

标签: javascript angularjs

当我尝试第三次从下拉列表中选择一个值时,我收到如下错误:

  

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");

  };

2 个答案:

答案 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指令内进行的,那么很可能它与前面描述的第二个编程事件触发器场景相匹配。在这种情况下,您可能需要进一步查看树,以便首先触发事件。

  •   

- AngularJS Error Reference - $rootScope - inprog

答案 1 :(得分:0)

在调用excute the digest error之前检查这个条件。

if($scope.$$phase)
{
  site.countryName = $scope.countriesMap[site.countryCode3];
}