我有一个使用GWT 2.7从java编译为javascript的现有模型。此模型中的每个属性都有一个getValue()和一个setValue()方法。方法名称不会受损。
我想在{{}}表达式中使用这些属性,特别是使用ngModel进行绑定。我正在使用“getterSetter”选项和$ scope中的一个函数,它在一个angularJS getterSetter函数中包含getValue()/ setValue()。
问题是我不想在每个范围内复制此功能。有没有办法在angularJS表达式中访问全局函数?
答案 0 :(得分:0)
来自文档:
Angular表达式无法访问全局变量,如窗口,文档或位置。这种限制是故意的。它可以防止意外访问全局状态 - 这是微妙错误的常见来源。
您可以将功能附加到模型原型吗?这样,只要您拥有模型实例,就可以访问它。
或者,您可以创建一个包装类(基本上是一个视图模型),它具有您需要的接口,并委托给真实的模型实例。
答案 1 :(得分:0)
经过一番搜索和实验后,我发现我可以使用directive
' controller
将功能添加到scope
。
.directive('wrapped', function() {
return {
controller: function($scope) {
$scope.wrapper = function(prop) {
// turns signal into getterSetter
return function(newVal) {
if (angular.isDefined(newVal)) {
prop.setValue(newVal);
}
return prop.getValue();
}
}
},
scope : {
model : '&'
},
templateUrl : 'template.html',
}
})
然后可以在模板中的表达式中使用范围中的函数。
<p class="field {{model().status().isValid() ? 'valid' : 'invalid'}}">
<span class="label">{{label}}:</span>
<input type="text" ng-model="wrap(model())" ng-model-options="{getterSetter: true}" ></input>
</p>
我很想听听更有经验的AngularJS程序员,如果有更习惯的方式来写这个。