anglejs – 角度指令:在孤立范围内使用ng模型

前端之家收集整理的这篇文章主要介绍了anglejs – 角度指令:在孤立范围内使用ng模型前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我无法解决如何定义一个自定义指令:

>使用隔离范围,和
>在其范本内使用ng-model指令.

以下是一个例子:

HTML

<body ng-app="app">
  <div ng-controller="ctrl">
    <dir model="foo.bar"></dir>
    Outside directive: {{foo.bar}}
  </div>
</body>

JS:

var app = angular.module('app',[])
  .controller('ctrl',function($scope){
    $scope.foo = { bar: 'baz' };
  })
  .directive('dir',function(){
    return {
      restrict: 'E',scope: {
        model: '='
      },template: '<div ng-if="true"><input type="text" ng-model="model" /><br/></div>'
    }
  });

这里所需的行为是通过指令(隔离)范围模型属性将输入值绑定到外部范围的foo.bar属性.这不会发生,因为模板的包围div上的ng-if指令创建一个新的范围,所以该范围的模型被更新,而不是指令的范围.
通常,您可以通过确定表达式中有一个点来解决这些ng模型问题,但是在这里我看不到任何方法.我想知道我是否可以使用像我这样的指令:

{
  restrict: 'E',scope: {
    model: {
      value: '=model'
    }
  },template: '<div ng-if="true"><input type="text" ng-model="model.value" /><br/></div>'
}

但这不行

Plunker

您是对的 – 如果创建一个子范围,当在输入文本字段中输入文本时会导致问题.它在子范围中创建一个名为“model”的影子属性,该属性是具有相同名称的父作用域变量的副本 – 有效地打破了双向模型绑定.

这个修复很简单.在您的模板中,指定$parent前缀:

template: '<div ng-if="true">
                   <input type="text" ng-model="$parent.model" /><br/>
             </div>'

这将确保它将从$parent范围解析“模型”,您已经通过隔离的作用域设置了双向模型绑定.

最后,”.在ng模式中节省了一天.我觉得有用的是思考点的任何东西,作为Angular通过范围继承来解析属性的一种方法.没有点,当我们分配范围变量(否则,查找很好,包括只读{{model}}绑定表达式)时,解析属性只会成为一个问题.

猜你在找的Angularjs相关文章