绑定到原型继承范围中的属性

You*_*sef 5 angularjs angularjs-directive angularjs-scope

我想创建一个带有原型继承范围的指令(即scope = true),还要设置范围绑定到属性,类似于设置隔离范围时的跟随:

scope = {
'varname':'=attrname'
}
Run Code Online (Sandbox Code Playgroud)

我目前的解决方案是设置scope = true并设置绑定到链接函数中以下行的属性:

范围.$ watch(element.attr('attrname'),function(val){scope.varname = val;}); //监视更改scope.varname = scope.$ eval(element.attr('attrname')); //初始化

虽然这样做但它看起来并不是很优雅.你建议采用什么方法?

我发现令人惊讶的是,angularjs似乎期望在一个指令中你在设置一个新的继承范围时不需要属性绑定.

pix*_*its 1

我知道你的意思并且我同意你的观点。如果 Angular 为指令提供了一个方便的框架来在父作用域变量和子作用域变量之间设置双向模型绑定,并且仍然支持原型作用域继承,那就太好了。

使用隔离范围达到与以下相同的效果:

 scope = {'varname':'=attrname'} 
Run Code Online (Sandbox Code Playgroud)

您可以在指令的链接函数中设置双向模型绑定:

scope: true,
link:  function(scope, element, attr) {
     // when attrname changes in parent scope, update varname in current scope
     scope.$parent.$watch(attr.attrname, function(newVal) {
          scope.varname = newVal;
     });

     // when varname changes in current scope, update attrname in parent scope
     scope.$watch('varname', function(newVal) { 
          scope.$parent[attr.attrname] = newVal;
     });
}
Run Code Online (Sandbox Code Playgroud)