首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Isolate Scope "=“绑定和点符号AngularJS

Isolate Scope "=“绑定和点符号AngularJS
EN

Stack Overflow用户
提问于 2014-01-12 13:29:35
回答 2查看 2.3K关注 0票数 6

如何在带点符号的隔离作用域中创建具有嵌套属性的双向绑定。我以为'myObject.data': "=data"可以工作,但它不是。我不想链接myObject对象中的所有内容。我知道我可以做一些手表,但'myObject.data'看起来更干净。

代码语言:javascript
复制
.directive("myDirective", [function() {
    return {
        restrict: "E",
        scope: {
            'myObject.data': "=data"
        },
        link: function (scope, element, attrs) {

            scope.myObject = {
                 data: "myValue"
            };
        }
     };
 }])
EN

回答 2

Stack Overflow用户

发布于 2014-01-12 14:02:15

隔离作用域通常只对模板有用,不应将其用作声明如何解释指令属性的方法。这是因为大多数没有模板的指令通常需要其环境的子作用域或直接作用域的语义。

在您的例子中,您甚至可能不需要$watch,因为对象引用支持双向数据绑定,但如果没有完整的代码,我就不能确定。

如果你想知道独立作用域语义到普通作用域语义的转换:

代码语言:javascript
复制
@name -> attrs.name
=name -> $scope.$eval(attrs.name);
&name -> function() { return $scope.$eval(attrs.name); } 

编辑2:

在您的评论之后,我想出了这个plunker。要保留双向数据绑定,您必须使用“。在您的ng-model声明中。这是因为双向数据绑定不适用于值类型,因为它们是不可变的。例如,您不能更改100的值。您需要传递一个引用类型对象,并挂起您正在更改的值。根据实现双向数据绑定的原则,您不可能希望指定隔离作用域定义中的值的完整路径。

Javascript:

代码语言:javascript
复制
angular.module('plunker', [])

.directive('twoWay', function() {
  return {
    restrict: 'E',
    template: '<div><input ng-model="thing.name" type="text" /></div>',
    scope: {
      thing: "="
    }, 
    link: function(scope, element, attrs) {
    }
  };
})

.controller('MainCtrl', function($scope) {
  $scope.data = {
    name: "World"
  };
});

HTML:

代码语言:javascript
复制
  <body ng-controller="MainCtrl">
    <p>Hello {{data.name}}!</p>
    <two-way thing="data"></two-way>
  </body>
票数 8
EN

Stack Overflow用户

发布于 2015-01-27 20:24:50

在这些情况下,我使用的内容如下:

代码语言:javascript
复制
.directive("myDirective", [function() {
    return {
        restrict: "E",
        scope: {
            data: "="
        },
        controller: function($scope){
           $scope.dot = $scope //<--- here is the trick
        } 
     };
 }])

然后,您始终可以通过dot.data = 'whatever'从继承的作用域更改指令作用域中的data,而无需设置监视器。

虽然不是很优雅,但在不使用controller as语法并且不想要$parent噩梦的情况下,它工作得很好。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/21071646

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档