在angularjs中调整非标准属性

时间:2015-01-15 07:11:03

标签: javascript angularjs gwt

我有一个使用GWT 2.7从java编译为javascript的现有模型。此模型中的每个属性都有一个getValue()和一个setValue()方法。方法名称不会受损。

我想在{{}}表达式中使用这些属性,特别是使用ngModel进行绑定。我正在使用“getterSetter”选项和$ scope中的一个函数,它在一个angularJS getterSetter函数中包含getValue()/ setValue()。

问题是我不想在每个范围内复制此功能。有没有办法在angularJS表达式中访问全局函数?

2 个答案:

答案 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程序员,如果有更习惯的方式来写这个。