首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Angular-xeditable无法从控制器按名称访问窗体

Angular-xeditable无法从控制器按名称访问窗体
EN

Stack Overflow用户
提问于 2015-05-21 10:25:26
回答 1查看 979关注 0票数 1

我试图在ng-repeat中构建angualr x-editable表单,但是当我试图通过控制器中的$scope访问表单时,我得到了一个错误。

代码语言:javascript
复制
<div ng-repeat="course in box.value track by $index">
   <form editable-form name="{{box.key}}{{$index}}">
      .....
      <button 
         type="button"
         class="btn btn-primary"
         ng-click="formAction(box.key, $index, 'show')">Edit
      </button>
   </form>
</div>

在JavaScript中,我有以下代码,但这会在执行时导致错误。

代码语言:javascript
复制
$scope.formAction = function (key, index, action) {
    var formName = key + index;
    if (action === 'show') {
         //console.log(formName) shows correct form name yet
        //Error!! TypeError: Cannot read property '$show' of undefined
        $scope[formName].$show();
    }
};

可x编辑的手册说表单name="{{box.key}}{{$index}}“应该在$scope上创建一个属性,但当我console.log($scope)时,我找不到该属性

EN

回答 1

Stack Overflow用户

发布于 2015-05-26 06:50:32

实际上,x-editable会将表单添加到作用域中,但不会添加到formAction所在的同一作用域中。ng-repeat为它呈现的每个项目创建一个作用域,这些作用域是原始作用域的子项,您可以在这些作用域上找到表单。

一种解决方案是将子作用域传递给formAction,如下所示:

代码语言:javascript
复制
<button 
     type="button"
     class="btn btn-primary"
     ng-click="formAction(box.key, $index, 'show', this)">Edit
</button>

然后在子范围中找到的表单上调用$show()

代码语言:javascript
复制
$scope.formAction = function (key, index, action, childScope) {
    var formName = key + index;
    if (action === 'show') {
        childScope[formName].$show();
    }
};
票数 6
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/30363521

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档