我有以下ckEditor指令。下面是我从如何在编辑器中设置数据的示例中看到的两个变体:
app.directive('ckEditor', [function () {
return {
require: '?ngModel',
link: function ($scope, elm, attr, ngModel) {
var ck = null;
var config = attr.editorSize;
if (config == 'wide') {
ck = CKEDITOR.replace(elm[0], { customConfig: 'config-wide.js' });
} else {
ck = CKEDITOR.replace(elm[0], { customConfig: 'config-narrow.js' });
}
function updateModel() {
$scope.$apply(function () {
ngModel.$setViewValue(ck.getData());
});
}
$scope.$on('modalObjectSet', function (e, modalData) {
// force a call to render
ngModel.$render();
});
ck.on('change', updateModel);
ck.on('mode', updateModel);
ck.on('key', updateModel);
ck.on('dataReady', updateModel);
ck.on('instanceReady', function () {
ngModel.$render();
});
ck.on('insertElement', function () {
setTimeout(function () {
$scope.$apply(function () {
ngModel.$setViewValue(ck.getData());
});
}, 1000);
});
ngModel.$render = function (value) {
ck.setData(ngModel.$modelValue);
};
ngModel.$render = function (value) {
ck.setData(ngModel.$viewValue);
};
}
};
}])
谁能告诉我这两者的区别是什么?
ck.setData(ngModel.$modelValue);
ck.setData(ngModel.$viewValue);
我应该使用哪一个。我看了一下angular文档,它说:
$viewValue
Actual string value in the view.
$modelValue
The value in the model, that the control is bound to.
我不知道作者在文档中写下这句话是什么意思:
发布于 2013-10-15 23:01:31
您正在查看正确的文档,但可能只是您有点困惑。$modelValue
和$viewValue
有一个明显的区别。它是这样的:
正如你已经在上面提到的:
视图中的
$viewValue:
实际字符串(或对象)值。
$modelValue:
控件绑定到的模型中的值。
我将假设您的ngModel引用的是<input />
元素...?所以您的<input>
有一个字符串值显示给用户,对吗?但实际的模型可能是该字符串的其他版本。例如,输入可能显示字符串'200'
,但<input type="number">
(例如)实际上将包含一个整数形式的模型值200
。因此,您在<input>
中“查看”的字符串表示是ngModel.$viewValue
,而数字表示将是ngModel.$modelValue
。
另一个例子是<input type="date">
,其中$viewValue
将类似于Jan 01, 2000
,而$modelValue
将是表示该日期字符串的实际javascript Date
对象。这有意义吗?
我希望这回答了你的问题。
发布于 2013-10-15 23:27:52
你可以看到类似这样的东西:
$modelValue
是你的外部API,也就是说,暴露给你的controller.$viewValue
的东西是你的内部API,你应该只在内部使用它。在编辑$viewValue
时,render方法不会被调用,因为它是“呈现的模型”。您必须手动执行此操作,而渲染方法将在$modelValue
修改时自动调用。
但是,由于有了$formatters
和$parsers
,信息将保持一致:
$viewValue
,$parsers
会将其转换回$modelValue
.$viewValue
,$parsers
会将其转换为$formatters
发布于 2013-10-15 23:24:22
Angular必须跟踪ngModel数据的两个视图--一个是DOM(浏览器)看到的数据,另一个是这些值的Angular处理表示。$viewValue
是DOM端值。例如,在<input>
中,$viewValue
就是用户在浏览器中键入的内容。
一旦有人在<input>
中输入了一些东西,$viewValue
就会被$parsers处理,并转换成Angular的值视图,这就是$modelValue
。
因此,您可以认为$modelValue
$viewValue
是angular处理后的值,也就是您在模型中看到的值,而是原始版本。
为了更进一步,假设我们做了一些改变$modelValue
的事情。Angular看到了这一变化,并调用$formatters创建要发送到DOM的更新的$viewValue
(基于新的$modelValue)。
https://stackoverflow.com/questions/19383812
复制相似问题