【问题标题】:How we set to ng-model variable to parent controller in nested controllers scope我们如何在嵌套控制器范围内将 ng-model 变量设置为父控制器
【发布时间】:2015-02-19 22:33:45
【问题描述】:

我有一个 ng-controller 嵌套在另一个控制器范围内。 我想将嵌套控制器范围中的范围变量设置为父控制器。 我有观点:

<div ng-controller="MyCtrl">
    <input type="text" ng-model="name"/>
    <div ng-controller="CountryDataController">
        <angucomplete
        (...)
        selectedObject="country"/>
    </div>
</div>

这是表单的一部分。 然后在提交表单时,我想从 MyCtrl (name,country) 发送 ng-models:

fields: {name: $scope.name, 
        country: $scope.country,
        },

我如何告诉 Angular,selectedObject 模型属于 MyCtrl,而不是 CountryDataController。 我试过了

selectedObject="MyCtrl.country"
selectedObject="country[MyCtrl]"

但没有效果。

angucomplete 中的selectedObject 像ng-model 一样工作。 此外,我不想将 CountryDataController 的逻辑重写为 MyCtrl,因为首先我有用于自动完成和第二个文件上传的字段。

这有什么约定吗?

【问题讨论】:

标签: angularjs angularjs-scope


【解决方案1】:

您可以使用$parent,但如果您移动您的 HTML 或最终添加另一个控制器,它会中断。

正确的做法是使用controller as语法,如下所示:

<!-- use topCtrl to access this controller scope -->
<div ng-controller="MyCtrl as topCtrl">
  <input type="text" ng-model="name"/>
  <!-- use countryCtrl to access this controller scope -->
  <div ng-controller="CountryDataController as countryCtrl">
      <angucomplete
      (...)
      selectedObject="topCtrl.country"/>
  </div>
</div>

【讨论】:

    【解决方案2】:

    答案是:

    selectedobject="$parent.country"
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-06-10
      相关资源
      最近更新 更多