2017-03-03 65 views
0

有一个应用程序使用Bootstrap Angular UI,变量为$scope.companies。在点击一个按钮时,第一个模式打开,该变量的公司显示在select元素中。Angularjs和BootstrapUI - 如何根据另一个模式中的更改更新变量

用户可以点击添加一个新公司按钮来打开一个新的,第二个,现有的模式(在现有的模式上),他可以创建一个新的公司。

关闭第二个模式后,用户返回到第一个模式,但select元素中的公司没有使用刚刚创建的新公司更新。

我的问题是 - 如何更新第一个模式,以便它反映出对$scope.companies的更改,并且该新公司在select元素中可用?

在我使用一个工厂主控制器(” sharedCompanies)来检索公司:

sharedCompanies.getCompanies().then(function(data){ 
    $scope.companies = data; 
} 

比,每次当我打开一个新的模式我做这样的事情传递范围,像这样:

$scope.newCompany = function() { 
    var newCompanyModalInstance = $uibModal.open({ 
     templateUrl: '/static/partials/newCompanyModal.html', 
     controller: 'NewCompanyCtrl', 
     size: 'lg', 

     resolve: { 
      events: function() { 
       return $scope.events; 
      }, 
     }, 
     scope: $scope 
    }); 

在每种模式中,我可以访问$scope.companies并且它们显示正确。新公司成功创建,但为了在select元素中可见,我需要关闭模块并再次打开它们...

如何在新元素已更新后更新这些模式中的$scope.companies变量添加?

+0

你是如何加入新公司的? – Ladmerc

回答

0

感谢您的意见创建关闭第二模式新增公司的数据推入$scope.companies之前,一个新的公司后!在您的帮助下,我诊断出这个问题:我没有从模态中返回正确的数据!有什么要添加在第二模式东西线这样的:

$http.post(addNewCompanyAndServicesApiURL, data) 
     .then(function successCallback(response) { 
      $scope.companies.push(response.data); 
      $uibModalInstance.close({ 
       companies:$scope.companies, 
      }); 
     }, function errorCallback(response){ 
      //... 
     }); 

,这部分在第一模赶上从第二个反应:

newCompanyModalInstance.result.then(function (data) { 
     $scope.companies = data.companies; 
    }); 

这解决了我的问题! :)

0

在第二模式使用$scope.companies.push(newlyCreatedCompany)

+0

这就是我已经在我的代码中。我所缺少的是我如何将数据从该模式返回到以前的范围!感谢您的好建议! – user1544500