【问题标题】:why $scope.info binding late on ng-change in custom directive为什么 $scope.info 在自定义指令中的 ng-change 绑定较晚
【发布时间】:2018-08-12 09:19:30
【问题描述】:

标签:

<grid-filter varible="info.M_id" on-change="searchMember()">
</grid-filter>

指令

app.directive("gridFilter", function () {
return {      
scope: {
varible: "=",
onChange: "&"
},
template: [
'<div class="input-append input-group">',
'<input class="form-control border-right-0" ng-change="onChange();"   no-special-char  class="form-control" ng-model="varible"    />',
'<div class="input-group-append">',
' <span class="input-group-text"><i class="fa-filter fa" aria-hidden="true"></i></span>',
' </div>',
' </div>'].join("")
};
})

控制器

$scope.searchMember = function () {      
    var data = $scope.info;
    Request.GetTabledata("SearchMemberData", data, null, $scope, true);
}

在文本框中输入时,例如 hello。控制器不会在第一次更改时绑定$scope.info.M_id。假设我输入 h , e 然后 $scope.info.M_id 只绑定 h

【问题讨论】:

    标签: angularjs angularjs-directive isolated-scope


    【解决方案1】:

    一种方法是使用单向 ("&lt;") 绑定作为输入,并使用 on-change 事件作为输出:

    app.directive("gridFilter", function () {
        return {      
                scope: {
                varible: "<",
                onChange: "&"
            },
            template: `
              <div class="input-append input-group">
                <input class="form-control border-right-0"
                       ng-change="onChange({$event: varible})"
                       no-special-char  class="form-control" ng-model="varible"  />
                <div class="input-group-append">
                  <span class="input-group-text">
                    <i class="fa-filter fa" aria-hidden="true"></i>
                  </span>
                </div>
              </div>
            `
        };
    })
    

    用法:

    <grid-filter  varible="info.M_id"
                  on-change="info.M_id=$event; searchMember($event)">
    </grid-filter>
    
    $scope.searchMember = function (data) {      
        console.log(data);
    }
    

    这将避免双向 ("=") 绑定固有的摘要循环延迟。

    由于 Angular 2+ 没有双向 ("=") 绑定,它还有一个额外的好处,那就是使将来更容易迁移到 Angular 2+。

    【讨论】:

    • 是的,它可以工作。我目前正在我们的项目中使用我的任务,以减少 ui 上的工作量。感谢您的帮助
    猜你喜欢
    • 2012-12-14
    • 2015-09-25
    • 1970-01-01
    • 2019-04-16
    • 2016-01-27
    • 1970-01-01
    • 2015-08-15
    • 2023-01-30
    • 2014-10-12
    相关资源
    最近更新 更多