好吧,从表面上看,这似乎是一个好主意……但实际上我不确定这是一个好主意。
方法 1. 可能是个坏主意的 Fancy 指令
为此,您需要创建一个新的 Scope 并将其 $compile 到嵌入的视图中。换句话说,您获取指令所在元素的内容,克隆它,创建一个新的子范围,更新它以获取您指定的属性中的值,然后将该新的子范围绑定到克隆然后附加到您的元素的元素。然后,您还将原始属性分配为新创建的范围。清如泥?呵呵。
编辑:我已经消除了双向绑定问题
编辑: ...并简化了很多
不过还是有点疯狂,因为现在你原来的 $scope.property 变成了它自己的范围。但它有效。
无论如何,这里有一些你可以如何做到的事情,以及一些代码......我不建议使用它,甚至不建议尝试它。
app.directive('notSureWhyYoudWantThis', function($parse) {
return {
scope: true,
link: function(scope, elem, attrs) {
// get the property getter/setter
var property = $parse(attrs.notSureWhyYoudWantThis);
// get the value from the scope (inherited from parent)
var base = property(scope);
// extend the child scope with whatever is in the base property.
angular.extend(scope, base);
// now set the property on the parent scope to be the child scope,
// so it updates both ways.
property.assign(scope.$parent, scope);
}
}
});
<div not-sure-why-youd-want-this="YPOBatch.YarnPOBatch.YarnType">
<div>
<span>Description:</span><span>{{YarnTypeDesc}}</span>
</div>
<div>
<span>ID:</span><span>{{YarnTypeYarnTypeID}}</span>
</div>
</div>
方法 2. 最佳创意:将您的数据整理成一个合适的模型,MVC-Programmer-Guy 先生!
所以这里最好的想法是最不性感的,你从你的数据源(AJAX、LocalStorage 等)获取那些丑陋的数据,然后你实际上将它修饰成一个最能代表你的视图/显示逻辑的模型。然后将该模型放在 $scope 上的一个属性中。然后结束。
这确实是你应该在 MVC 中做的事情,特别是如果你完全是领域驱动的,但它对某些人来说并不有吸引力,因为会产生额外的工作,有时希望能够直接提交以单数形式从前到后的数据。
var ypoBatch= myService.getSomeDataFromSomething();
$scope.yarnType = {
id: ypoBatch.YarnPOBatch.YarnTypeYarnTypeID,
description: ypoBatch.YarnPOBatch.YarnTypeDesc
};
那么在你看来:
<div>
<div>
<span>Description:</span> <span>{{yarnType.description}}</span>
</div>
<div>
<span>ID:</span> <span>{{yarnType.id}}</span>
</div>
</div>
无聊:是的。
更好:可能。
显然,您如何执行上述操作将视情况而定。但这就是想法。现在你有很多方法可以给这只猫剥皮。祝你好运。