首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >$http在工厂内所做的数据更改不会反映到DOM中

$http在工厂内所做的数据更改不会反映到DOM中
EN

Stack Overflow用户
提问于 2015-06-21 01:16:21
回答 2查看 68关注 0票数 0

我正在尝试创建一个基于对象的动态表单。例如:我希望生成的选择框将包含选项(如果给定),否则工厂将使用ajax获取它们,如下所示:

标记:

代码语言:javascript
复制
<select ng-repeat="select in selects"
        ng-init="options = refactor.options(select)"
        ng-options="option in options">
</select>

控制器:

代码语言:javascript
复制
myApp.controller('MyCtrl', function($scope, refactor) {
   $scope.refactor = refactor;
   $scope.selects = [
          { text: "Country", value="chosen.country", options=["France", "England"] },
          { text: "Gender", value="chosen.gender", options="/gender" }
        ]
});

工厂:

代码语言:javascript
复制
myApp.factory('refactor', function($scope, $http) {
  return {
    options: function(select) {
      if(typeof(select.options) === 'object') { return select.options };
      // otherwise assume select.options is 
      // a path to fetch options by ajax:
      $http.get(select.options).success(function(data) {
         select.options = data; // data == ['male', 'female']
      });

      return []; // placeholder until promise is fulfilled
    }
  }
})

数据( $scope.selects )会按预期更新,而DOM却不会,这可能意味着不会再次调用refactor.options()来响应更改。我试图通过将scope对象传递给工厂并在其上调用$apply来强制更新,但它不起作用。

我遗漏了什么?

EN

回答 2

Stack Overflow用户

发布于 2015-06-21 01:23:25

您需要使用ng-init="data = refactor.options(select)",以便从ajax获取数据后,数据将用options填充,然后您可以使用ng-options as而不是ng-options="option in data.options"

标记

代码语言:javascript
复制
<select ng-repeat="select in selects"
    ng-init="data = refactor.options(select)"
    ng-options="option in data.options">
</select>
票数 0
EN

Stack Overflow用户

发布于 2015-06-21 17:55:14

你应该试试这个

代码语言:javascript
复制
myApp.factory('refactor', function($scope, $http) {

return {
    options: function(select) {
               var menuItems={
                     options:[]
                  }

                if(typeof(select.options) === 'object'){
                   menuItems.options=select.options
                };

               // otherwise assume select.options is 
               // a path to fetch options by ajax:

               $http.get(select.options).success(function(data) {
                    select.options = data; 
                    menuItems.options=data;// data == ['male', 'female']
               });

               return menuItems; // placeholder until promise is fulfilled
            }
       }
});

那么在你的视图中它应该是这样的

代码语言:javascript
复制
<select ng-repeat="select in selects"
    ng-init="menuItems= refactor.options(select)"
    ng-options="option in menuItems.options">
</select>
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/30956832

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档