【问题标题】:AngularJS: read initial value of ngModel.$viewValue from different directiveAngularJS:从不同的指令读取 ngModel.$viewValue 的初始值
【发布时间】:2013-08-29 18:49:21
【问题描述】:

我想从不同的指令中读取初始值 ngModel.$viewValue。

# coffee script
app.directive 'directive', -> 
  return {
      require: '?ngModel',
      link: (scope, element, attrs, ngModelCtrl) ->
      ........
           console.log(ngModelCtrl.$viewValue) # does give NaN!

           ngModelCtrl.$setViewValue('something'); # only after setting reading does work
           console.log(ngModelCtrl.$viewValue)

非常感谢任何帮助。

【问题讨论】:

  • 这是关于指令 -> 使用 ngModelController API 的指令通信

标签: angularjs angularjs-directive


【解决方案1】:

我自己修好了...愚蠢:)

    link: (scope, element, attrs, ngModelCtrl) ->

        scope.$watch(ngModelCtrl, ->
          console.log(ngModelCtrl.$viewValue)
        )

确实有效!哎呀!

【讨论】:

    【解决方案2】:

    不需要看,而且 ng-init 很糟糕。有点像..

          return {
              require: 'ngModel',
              link: function(scope, element, attrs, ngModel) {
                    var getter = $parse(attrs.ngModel);
                    var value = getter(scope);
    
               }
            };
    

    这里value 将给出模型中的初始边界值。

    【讨论】:

    • 这是最好的方法吗?我不清楚,因为这或$watch 都可以工作.. 这似乎减少了开销
    • @Claudiu 的意图是避免 watch 的开销
    【解决方案3】:

    将您的操作放在 $timeout 内...就像您对 $apply 所做的那样,因此您的代码将在 $digest 完成它的过程后运行...

    像这样:

    link: function (scope, el, attr, ctrl) { //Ctrl will bind to required ones
                    //ctrl[0] -> ngModel
                    $timeout(function() {
                        scope.parentId = ctrl[0].$viewValue;
                        scope.startUp();
                    }, 0);
                }
    

    【讨论】:

      【解决方案4】:

      如果你想在你的指令中使用来自 HTML 的一些值,你应该使用 ngInit。它看起来像

      <div directive ng-init="variable='value'"></div>
      

      我遇到了同样的问题,结果证明我所做的不是 Angular 方式。查看link了解更多详情

      【讨论】:

      • 这不是解决办法...见我上面的帖子。亲切的问候。
      猜你喜欢
      • 2014-09-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-01-02
      • 1970-01-01
      • 2014-09-25
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多