【问题标题】:2-way data binding between partials in angularjsangularjs中部分之间的2路数据绑定
【发布时间】:2014-07-03 22:11:45
【问题描述】:

希望解决看似相当简单的问题,但不知道如何进行。

我编写了一个简单的单页 angular 应用程序,最近开始将其切换到 ui.router(令人敬畏的 angular-ui 变体)。对于应用程序的要求,它允许我做的事情远远超过常规的ngRoute 模块(尤其是嵌套视图)。

在转换它之后,我发现我无法让数据在部分之间绑定。我有一个包含几个子视图的主视图,这些子视图需要能够在它们之间进行实时数据绑定。这在以前不是问题,因为每个组件都存在于一个视图中(我将它们拆分为子视图/部分,并将它们包含在 ui-router 中)。

所以,这是我现在设置的:

index.htmlui-view 中的主视图用于包含多个部分。

main view
   -form partial
   -preview pane partial
   -review partial
   -submission partial

我只创建了一个控制器来处理应用程序的这一部分;部分似乎适用于控制器传递的数据,但不适用于彼此之间的数据绑定。

我需要做的是实现表单部分输入和预览部分之间的实时数据绑定;最好的方法是什么?服务,指令?

谢谢大家!

ps:如果你对UI Router不熟悉,你可以用普通的ngRoute来解释一下,我可以理解

编辑:这是我的状态设置方式:

(包含部分的主要区域,由 ng-app 指令包围)

<div ng-controller="MainCtrl" class="contstrain_y_scroll">
        <section>
     <div ui-view="form"></div>
     <div ui-view="tribute"></div>
     <div ui-view="submit"></div>
     <div ui-view="sidebar"></div>                   

    </section>
</div>

(在 app.js 中)

        $stateProvider
        .state('main', {
            url: '/',
            controller: 'MainCtrl',
            views: {
                'sidebar': {
                    templateUrl: 'views/partials/main.sidebar.html',

                },
                'form': {
                    templateUrl: 'views/partials/main.form.html',

                },
                'tribute': {
                    templateUrl: 'views/partials/main.tribute.html',
                },
                'submit': {
                    templateUrl: 'views/partials/submit.html',
                }
            }
        })

我的控制器似乎在为每个部分工作,但我想根据另一个(表单)中的输入来评估一个部分(侧边栏)中的表达式。希望这能让我的问题更清楚一些;非常感谢您的帮助!

【问题讨论】:

  • 通常,对于不同控制器之间的数据共享,您将使用服务。我看不出为什么它应该在这里有所不同。
  • 是的,但这不在控制器之间。我有一个部分的 ng-model 和另一个需要相互通信的表达式。服务是否也适用于此?
  • 您能否提供有关如何设置您的states 的代码?还有可能是发生partial 交互的HTML 的sn-ps?我仍然不太确定如果所有部分共享同一个控制器,为什么会有任何问题。
  • 没问题!我会更新问题
  • 已更新;希望这能让我想要得到的东西更清楚一些。对 Angular 还是有点陌生​​,之前没有遇到过这个用例,所以我很感激你的帮助!

标签: javascript angularjs angular-ui-router


【解决方案1】:

我注意到的一件事是您的div 上有一个ng-controller="MainCtrl" 声明。

默认情况下,当您使用ui-router 时,您在状态定义中指定的控制器将自动应用于整个页面。通过在 HTML 中再次声明它,您基本上是在声明它两次。

据我了解,HTML 中的冗余声明很可能会在您的 DOM 中创建一个额外的 $scope。它可以使事情变得怪异。尝试删除它,看看是否有帮助。

【讨论】:

  • 我从状态配置区域中删除了控制器声明,它现在可以工作了;其他一些表达式没有约束力,但我会检查它们以确保它们不会因其他原因出错。谢谢!
  • 跟进有关 Angular 的一般问题:部分之间的 2 路绑定是否需要控制器?不记得在文档中看到过任何相关内容,但也许我错过了。
  • @markimus 您在 HTML 中使用的所有变量都需要存储在某个地方。而某处恰好是绑定到控制器的$scope。如果变量存储在同一个控制器/$scope 中,那么您可以在一个地方控制这些变量。因此,对于您的问题,它甚至不是关于双向绑定,而是更多关于范围问题。
  • 啊。谢谢! $scope 似乎是在 Angular 中真正理解的更棘手的事情之一
猜你喜欢
  • 2017-04-28
  • 1970-01-01
  • 2015-02-10
  • 2016-04-18
  • 1970-01-01
  • 1970-01-01
  • 2018-01-11
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多