【问题标题】:Cannot set property '$render' of undefined无法设置未定义的属性“$render”
【发布时间】:2016-06-21 06:24:25
【问题描述】:

请帮助解决这个错误“无法设置未定义的属性'$render'”。我知道这个问题已经被问过了,但我无法解决。

    $scope.editmode = false;
$scope.toggleEditMode = function () {
    $scope.editmode = $scope.editmode === false ? true : false;

}

    directives.directive("contenteditable", function () {

返回{

link: function(scope, element, attrs, ngModel) {

  function read() {
    ngModel.$setViewValue(element.html());
  }

  ngModel.$render = function() {
    element.html(ngModel.$viewValue || "");
  };

  element.bind("blur keyup change", function() {
    scope.$apply(read);
  });
}

}; });

    <tr dir-paginate="us in zdravstveniPostupci |  filter: {Postupak: nasUser} | orderBy:orderByField:reverseSort | itemsPerPage:selectedMenu" ng-dblclick="updateOsoba(us, selectMjesto )" on-long-press="updateOsoba(us, selectMjesto )" ng-click="odaberiOsobe(us,$index)" ng-attr-contenteditable="{{ editmode }}">

                        <td ng-repeat="key in draggableObjects" ng-if="key.visible"  >
                            <span ng-if="key.name!='Mjesta'"> {{us[key.name]}}</span>

                        </td>

                    </tr>

    <div class="col-md-4 center-block" style="position:fixed;top:36%;left:82%;" id="gumbicc">
<button type="button" class="btn  btn-responsive"  ng-click="toggleEditMode(); ShowHide()" >{{editmode ? 'Disable Editing' : 'Enable Editing'}}</button></div>

【问题讨论】:

    标签: javascript angularjs


    【解决方案1】:

    如果你在链接函数中使用 ngModel,你应该在指令中使用它

    return {
       require: 'ngModel', // <---THIS
       link: function(scope, element, attrs, ngModel) {
    
      function read() {
        ngModel.$setViewValue(element.html());
      }
    
      ngModel.$render = function() {
        element.html(ngModel.$viewValue || "");
      };
    
      element.bind("blur keyup change", function() {
        scope.$apply(read);
      });
    }
    

    【讨论】:

    • 然后我得到这个错误:错误:[$compile:ctreq] 控制器'ngModel',指令'contenteditable'需要,找不到!
    • 所以我在某处缺少 ng-model
    【解决方案2】:

    在你的指令中需要 ngModel。

    directives.directive("contenteditable", function () {
        return {
            require: 'ngModel',
            link: function(scope, element, attrs, ngModel) {
    
              function read() {
                ngModel.$setViewValue(element.html());
              }
    
              ngModel.$render = function() {
                element.html(ngModel.$viewValue || "");
              };
    
              element.bind("blur keyup change", function() {
                scope.$apply(read);
              });
            }
        }
    }
    

    您可以参考这个现有的SO post 以获得有关 ngModel 的详细说明。

    【讨论】:

    • 然后我得到这个错误:错误:[$compile:ctreq] 控制器'ngModel',指令'contenteditable'需要,找不到!
    • @IvanLuketić 纠正我如果我错了,你想让 us[key.name] 的值可以编辑吗?
    • 它是一个我希望在按钮单击时可编辑的表格
    • 我尝试通过将ng-model="us[key.name]" 和指令放在span 元素中而不是将其放在&lt;tr&gt; 中来创建fiddle。它正在工作,但是将空格和制表符解释为 html 实体存在问题。另外,不知道这是否会有所帮助,但有一个现有的项目textAngular,您可能想检查一下。
    猜你喜欢
    • 2021-11-27
    • 2022-10-30
    • 2023-02-10
    • 2015-12-07
    • 2013-05-28
    • 2016-02-23
    • 2011-11-20
    相关资源
    最近更新 更多