gpt4 book ai didi

javascript - 隔离范围 "="绑定(bind)和点符号 AngularJS

转载 作者:数据小太阳 更新时间:2023-10-29 05:12:44 25 4
gpt4 key购买 nike

如何在带点符号的独立作用域中使用嵌套属性创建双向绑定(bind)。我认为 'myObject.data': "=data" 会工作,但事实并非如此。我不想链接 myObject 对象中的所有内容。我知道我可以做一些观察,但 'myObject.data' 看起来更干净。

.directive("myDirective", [function() {
return {
restrict: "E",
scope: {
'myObject.data': "=data"
},
link: function (scope, element, attrs) {

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

最佳答案

独立范围通常只对模板有用,它们不应该用作声明您希望如何解释指令属性的方式。这是因为大多数没有模板的指令通常需要子作用域或其环境的直接作用域的语义。

在您的情况下,您可能甚至不需要 $watch,因为对象引用启用了双向数据绑定(bind),但如果没有您的完整代码,我无法确定。

如果您想知道将独立范围语义翻译为普通范围语义:

@name -> attrs.name
=name -> $scope.$eval(attrs.name);
&name -> function() { return $scope.$eval(attrs.name); }

编辑 2:

在您发表评论后,我想到了这个 plunker .要保留双向数据绑定(bind),您必须使用“.”。在你的 ng-model 声明中。这是因为双向数据绑定(bind)不适用于值类型,因为它们是不可变的。例如,您不能更改 100 的值。您需要传递一个引用类型对象并挂起您正在更改的值。根据使双向数据绑定(bind)成为可能的原则,您不可能希望在独立范围定义中指定值的完整路径。

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:

  <body ng-controller="MainCtrl">
<p>Hello {{data.name}}!</p>
<two-way thing="data"></two-way>
</body>

关于javascript - 隔离范围 "="绑定(bind)和点符号 AngularJS,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21071646/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com