[英]AngularJS : Directive Isolated Scope Undefined
我正在使用AngularJS
的双向绑定编写带有isolate scope
的指令。 但是,我似乎无法让双向绑定工作。 无论我做什么, isolate scope
上的populate
属性总是undefined
(虽然属性确实存在),而不是它应该被绑定的值。
HTML:
<html>
<body ng-app="MyApp">
<div ng-controller="MyController">
{{data.dataProp}} <!-- demonstrates that data.dataProp is defined -->
<scope-fail data-source="data.dataProp"></scope-fail>
</div>
</body>
</html>
JS:
angular.module("MyApp", [])
.controller('MyController', function ($scope) {
$scope.data = {
dataProp: 'Some Data'
}
})
.directive('scopeFail', function ($window) {
return {
restrict: 'E',
scope: {
populate: '=dataSource'
},
template: '<div>Value: {{populate}}</div>',
link: function (scope, element, attrs) {
console.log('Scope property:', scope.populate); //prints Scope property: undefined
}
};
})
CodePen与上面的代码: CodePen链接
那么为什么CodePen没有显示“价值:一些数据”? 我认为应该发生的是, populate
绑定到自定义元素上的data-source
的值,该元素是控制器作用域上的data.dataProp
,即Some Data
。
我在哪里出错/如何让隔离范围与data-source属性进行双向绑定?
非常感谢
更改populate: '=dataSource'
以populate: '=source'
或向data-source
添加额外的data-
属性前缀。 AngularJS自动剥离data-
属性以允许有效的html5范围属性。
你的语法错了。 应该是这样
.directive('scopeFail', function ($window) {
return {
restrict: 'E',
scope: {
dataSource: '='
},
template: '<div>Value: {{scope.dataSource}}</div>',
link: function (scope, element, attrs) {
console.log('Scope property:', scope.dataSource); //prints Scope property: undefined
}
};
})
范围属性通过属性名称作为属性传递,并且您将数据绑定定义为双向,评估或只读。
编辑
csbarnes的回答也会起作用,因为dataSource: '='
只是dataSource: '=dataSource'
简写dataSource: '=dataSource'
但它使可读性和调试更加困难IMO。 我发现保持属性名称和范围属性相同更容易。 但是每个人都有自己的。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.