是否有可能改变AngularJS查找变量的位置?

时间:2016-08-27 08:07:01

标签: javascript angularjs angularjs-scope

现在,我知道这是一个悬而未决的问题,并且可能不会有任何API级别访问来执行此操作。我也明白这样做完全没必要。但是,我的目标实现要求我能够{{ variable }}查看$scope.object而不是$scope本身。

例如:

Controller($scope) {
    $scope.active = ...;
}

在这种情况下,您可以通过{{active}}获取活动对象以及通过{{active.broken}}获取任何子元素但是为了让我感到幽默,让我们假设我将要拥有的所有变量获得将成为该活动对象的一部分。所以我会输入类似的东西......(数据无关)

{{active.title}}
{{active.author}}
{{active.content}}

您可以说“好吧,为什么不将title/author/content移动到$scope并将其保留在active对象之外,因为这样可以达到预期效果:< / p>

{{title}}
{{author}}
{{content}}

嗯,这就是问题所在。这是一个没有向我的最终用户公开的控制器,但是最终用户确实有一个完全可变的对象(在这个例子中:active)他们可以修改。此对象有许多[可选]侦听器和回调,必要时由应用程序控制器调用。

在测试过程中使用过我的应用程序的用户评论了为了获取他们想要的数据而必须在所有内容之前输入active.的拖动内容。考虑到来自$scope的数据永远不会呈现给屏幕,只有来自active的数据,我想知道是否有一种方法可以改变AngularJS在解析/绑定数据时的外观。

1 个答案:

答案 0 :(得分:0)

如果目标是在与$scope不同的上下文中评估表达式,则可以使用$parse服务来完成。

app.controller("myVm", function($scope, $parse) {
    var vm = $scope;
    vm.active = { a: 5,
                  b: 3
                };

    var.myFn = $parse("a+b");

    vm.total = myFn(vm.active);
    console.log(vm.total);
});

上面的示例演示了如何使用a+b对象的属性评估表达式$scope.active

DEMO on JSFiddle