【发布时间】:2014-11-21 17:22:38
【问题描述】:
给定以下 Plunker:http://plnkr.co/edit/YicBDARAf5umI0PdCL8L?p=preview
为什么没有在指令控制器中设置 $scope.someVal?
我希望模板的输出能够显示
someVal = ABC controllerVal=DEF
但它显示
someVal = 123 controllerVal=DEF
HTML:
<html>
<head>
<script data-require="angular.js@1.2.25" data-semver="1.2.25" src="https://code.angularjs.org/1.2.25/angular.js"></script>
</head>
<body ng-app='myApp'>
<my-test some-val="123"></my-test>
<script>
angular.module("myApp", [])
.directive("myTest", function() {
return {
restrict: "E",
scope: {
someVal: "@"
},
template: "someVal = {{someVal}} controllerVal={{controllerVal}}",
controller: function($scope) {
$scope.someVal = "ABC";
$scope.controllerVal = "DEF";
}
}
});
</script>
</body>
</html>
【问题讨论】:
-
这是传递引用与 valueType 的常见问题。使用
Model.someVal...在此处查看stackoverflow.com/a/21882900/1679310。 (模型将作为引用传递,因此指令内部范围内更改的值将更改该引用的字段Model.someVal- 因此一切都将按预期工作) -
plnkr.co/edit/zCSWDa?p=preview 您不需要 2 路绑定。您只需确保您的范围更新稍后运行,否则它将被一次性绑定值覆盖。
-
@PSL:复制为答案,我会接受。谢谢!
-
@Scottie 当然我会添加它并附上解释。谢谢!
标签: angularjs angularjs-directive angularjs-scope