【问题标题】:Why can`t I access scope via controller?为什么我不能通过控制器访问范围?
【发布时间】:2018-07-25 13:26:33
【问题描述】:

我正在从事激情项目。而且我无法访问范围以将数据传递给后端框架。

这是我的索引文件

<div id="main-menu" ng-controller="appCtrl">
//some other code
  <div id="includedDocumentsFilter" style="float:right; display:none; padding-right: 10px;">
    <my-documents validate-options="validateDialogOptions()"  call-dialog="showDialog()"> </my-documents>
  </div>
//some other code
</div>

我的自定义指令

'use strict';
dbApp
    .directive('myDocuments', [
        function () {

                var documentTemplate =
                    ' <div class="caption-row">' +
                    '<kendo-button style="width:62px" ng-click="changeDocument(true)"> Ok </kendo-button>'+
                    '<kendo-button style="width:62px" ng-click="changeDocument(false)" > Revert changes </kendo-button>'+
                    '</div>' 
                    
            }

            return {
                scope: true,
                template: documentTemplate
            }
        }]
    )

我的控制器

        $scope.changeDocument = function (applyFilter) {
            if (applyFilter === true) {
            
            //Here is where I cant access $scope
            
            }

        }

【问题讨论】:

  • 您发布的内容不可能。
  • 你能解释一下原因吗?或者您能提出解决方案吗?
  • 您的意思是 $scope 在您的方法中未定义,还是您的方法从未被调用?
  • 是的,当我从自定义指令调用它时,控制器内部没有定义范围。

标签: javascript angularjs angularjs-directive kendo-ui angularjs-scope


【解决方案1】:

首先,我在您的指令中看到一个额外的右花括号。其次,在您的 html 代码中有 display:none 在 id 为“includedDocumentsFilter”的 div 中。只是想知道如果您隐藏了 div,您将如何看到指令中定义的模板。我使用您上面提到的代码在下面添加了一个有效的 jsfiddle 链接

dbApp.directive('myDocuments', [
    function () {

            var documentTemplate =
                ' <div class="caption-row">' +
                '<kendo-button style="width:62px" ng-click="changeDocument(true)"> Ok </kendo-button>'+
                '<kendo-button style="width:62px" ng-click="changeDocument(false)" > Revert changes </kendo-button>'+
                '</div>' 


        return {
            scope: true,
            template: documentTemplate
        }
    }]
)

JsFiddle 链接:https://jsfiddle.net/anilsarkar/gk2dfh1p/21/

注意:我已经用 jsfiddle 中的 span 替换了 kendo-button

【讨论】:

  • 感谢修复错误。我确实有点帮助。但我发现真正的答案是使用 k-append-to。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-11-21
  • 1970-01-01
  • 1970-01-01
  • 2021-07-01
  • 1970-01-01
  • 2013-11-18
相关资源
最近更新 更多