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

时间:2016-09-04 23:28:46

标签: angularjs coffeescript

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

这些面包屑都在指令中。如何从此外部指令访问表单?我试过了:
$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)
      ]
    }
]

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

2 个答案:

答案 0 :(得分:1)

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

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

  • 您可以像使用breadcrumbs一样使用双向绑定。

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

答案 1 :(得分:0)

我能够通过添加

来实现这一目标
scope:
  breadcrumb: '=breadcrumbs'
  placeholder: '@'
  form: '?=form'

增加了将表单添加到breadcrumb指令

的功能

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