angular.js $scope 没有附加到外部指令中的表单

angular.js $scope not attaching to form in external directive

我正在开发 angular 应用程序。现在我们有这些指令,它们是引导您完成长长的向导表单的面包屑。我遇到的问题之一 运行 是,如果您在表单的一部分中有错误并单击面包屑返回,它不会让您在整个表单中前进(下一个按钮中断)。所以解决这个问题的方法(我相信)是不要让你点击这些面包屑,除非表格没有任何错误。

这些面包屑位于指令中。如何从此外部指令访问表单?我试过:
$scope.competitionCreateForm
$scope.$competitionCreateForm
competitionCreateForm.$error
等等,似乎没有任何效果。但是,当我 console.log competitionCreateForm 确实看到了实际的表单对象时,我知道该部分正在工作。

这是指令的样子 (coffeescript)

angular.module('App').directive 'breadcrumb', [
  'WizardHandler'
  (WizardHandler) ->
    {
      restrict: 'E'
      scope:
        breadcrumbs: '=breadcrumbs'
        placeholder: '@'
      templateUrl: 'directives/templates/breadcrumbs.html'
      #require: ''

      controller: ['$scope', ($scope) ->
      # checking right here
        $scope.goToStep = (step) ->
          $scope.currentStepValid = true 
          WizardHandler.wizard().goTo(step)
      ]
    }
]

我查看了其他答案,但似乎没有效果。也许我在第一次创建表单时需要添加一些东西,但我不确定。有谁知道如何从外部指令检查我的表单对象的状态?

因此,通过在指令上使用范围 属性,您正在为指令创建一个独立的范围,这意味着该指令无法访问父指令的范围。

如果您希望继续使用隔离范围,您有两种选择:

  • 您可以像使用 breadcrumbs 一样使用两种方式绑定。

  • 另一种选择是使用单向绑定,即 '<' 将表单状态传递到您的指令中。这将在 属性 更改时更新指令,就像双向绑定一样,但不允许从指令修改表单。

我可以通过添加

来实现它
scope:
  breadcrumb: '=breadcrumbs'
  placeholder: '@'
  form: '?=form'

增加了选择性地向面包屑指令添加表单的能力

breadcrumb[breadcrumb='breadcrumb' form='createForm']