ng-model不使用模板将值更新为object

时间:2014-04-21 10:06:30

标签: angularjs

我正在使用Angular处理MVC应用程序。我需要在其中一个应用程序页面中打开各种bootstrap模式。为此,我刚刚编写了一个简单的角度服务来从一个名为templates的文件夹获取模态,并在运行时加载。除了一件事,一切都很好。 ng-model 不适用于复选框控件和DropDownList(select)项。 服务加载模板:

var defaultPath = "/app/services/dialog/templates/";
function _loadModalTemplate(templateName) {
      var defer = $q.defer();
      if (angular.isUndefined($templateCache.get(templateName))) {
      return $http.get(defaultPath + templateName).then(function (data) {
            $templateCache.put(templateName, data.data);
                 return defer.resolve();
            });
      } else {
         return $.when($templateCache.get(templateName));
      }
    return defer.promise;
      }

控制器

notebook.controller('createworkitemcontroller', ['$scope', '$modalInstance', 'workitemDataContext', 'common', 'options',
        function ($scope, $modalInstance, workitemDataContext, common, options) {
            $scope.activities = options.activities || [];
            $scope.activity = $scope.activities[0];        
        }]);

模板HTML

<div class="col-lg-6">
    <label class="text-xs">Activity</label>
    <select class="form-control input-sm" data-ng-options="a.Name for a in activities" data-ng-model="activity"></select>
</div>

数据绑定工作正常,但在进行任何更改时,它不会更新属性 $ scope.activity 。同样具有复选框的情况,但使用TextBox

1 个答案:

答案 0 :(得分:0)

我想知道这项任务是否打破了范围链。尝试在$scope.model = {activity: ...}等专用对象中添加变量,看看它是否有效。当我开始使用多个模态和控制器时,我遇到了这个问题。这是一个小提琴,我做了一段时间展示了这个概念:

http://jsfiddle.net/6XDtN/

http://jsfiddle.net/6XDtN/1/

在第一个中,父母是遗忘的,因为孩子重新定义了变量,打破了范围链。重新定义变量并不明显,但如果不这样做,就无法真正重新赋值。

在第二个中,复杂类型(即对象)未重新定义,只更新属性。因此,这一范围的范围很强。

希望这有帮助!