Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/406.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 指令中没有隔离作用域的双向数据绑定_Javascript_Angularjs - Fatal编程技术网

Javascript 指令中没有隔离作用域的双向数据绑定

Javascript 指令中没有隔离作用域的双向数据绑定,javascript,angularjs,Javascript,Angularjs,我有一个指令,它需要与使用隔离作用域的指令一起工作。当然,这会引发以下错误: Multiple directives asking for new/isolated scope 我的代码大致如下所示: HTML: 我已经尝试从我的指令中完全删除范围,并使用以下内容: scope.exampleDirective = scope.$eval(attributes.exampleDirective) 然而,这似乎只适用于对象,而我针对的是其他类型的变量 如何做到这一点?试试以下方法: app.d

我有一个指令,它需要与使用隔离作用域的指令一起工作。当然,这会引发以下错误:

Multiple directives asking for new/isolated scope
我的代码大致如下所示:

HTML:

我已经尝试从我的指令中完全删除范围,并使用以下内容:

scope.exampleDirective = scope.$eval(attributes.exampleDirective)
然而,这似乎只适用于对象,而我针对的是其他类型的变量

如何做到这一点?

试试以下方法:

app.directive('ExampleDirective',function() {
  return {
    restrict: 'A',
    bindToController: {
        exampleDirective: '='
    },
    scope: true,
    link: function(scope,element,attributes) {
        // manipulate scope.exampleDirective
    }
  }
});

我在这里看到的问题是,vendor_指令已经创建了一个隔离范围,因此angular不允许您在同一摘要周期中定义另一个隔离范围。有两种方法可以解决这个问题-

  • 第一个也是更复杂的一个是,您修饰了vendor指令以包含自定义指令的功能。这是一种更稳定、更可靠的方式。在这里查阅装饰师的文档

  • 第二个简单的方法是在attributes.exampleDirective变量上使用$watcher,并在每次更改时执行函数,这样它将模拟您所需的双向绑定


希望这有助于

指令的控制器中应该有什么才能使其工作?使用创建setter和getter函数。在这种情况下,decorator实际上是不可能的,因为这两个指令并不总是在一起,我只需要在它们在一起时解决它。至于您的第二个解决方案,我无法监视它们,因为此时它们只是字符串而不是绑定,而且它们永远不会改变。
scope.exampleDirective = scope.$eval(attributes.exampleDirective)
app.directive('ExampleDirective',function() {
  return {
    restrict: 'A',
    bindToController: {
        exampleDirective: '='
    },
    scope: true,
    link: function(scope,element,attributes) {
        // manipulate scope.exampleDirective
    }
  }
});