我正在使用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
答案 0 :(得分:0)
我想知道这项任务是否打破了范围链。尝试在$scope.model = {activity: ...}
等专用对象中添加变量,看看它是否有效。当我开始使用多个模态和控制器时,我遇到了这个问题。这是一个小提琴,我做了一段时间展示了这个概念:
在第一个中,父母是遗忘的,因为孩子重新定义了变量,打破了范围链。重新定义变量并不明显,但如果不这样做,就无法真正重新赋值。
在第二个中,复杂类型(即对象)未重新定义,只更新属性。因此,这一范围的范围很强。
希望这有帮助!