我对于AngularJS指令中'模板'呈现时有点困惑。请参见下面的代码片段:AngularJS指令在模板呈现时
<!DOCTYPE html>
<html ng-app="plunker">
<head>
<meta charset="utf-8" />
<title>AngularJS </title>
<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.1.5/angular.js" data-semver="1.1.5"></script>
<script src="script.js"></script>
</head>
<body ng-controller="MainCtrl">
<example-directive name="{{name}}"></example-directive>
</body>
</html>
var app = angular.module('plunker', []);
app.controller('MainCtrl', function($scope) {
$scope.name = 'First ONE ';
});
app.directive('exampleDirective', function() {
return {
restrict: 'E',
scope: {
name: "@"
},
template: '<p>Hello {{name}}!</p>',
controller: function($scope, $element){
$scope.name = $scope.name + "Second ";
$scope.name2 = $scope.name + "Second ";
},
link: function(scope, el, attr) {
scope.name = scope.name + "Third ";
$scope.name2 = $scope.name + "Second ";
}
}
})
它显示“Hello首先一号”,这意味着没有在控制器和链接功能的第一条语句的改变的值名称范围内,或者更改未反映在模板中。
但是,如果我改变了指令
template: '<p>Hello {{name2}}!</p>'
或变“名”,以双向使用“=”,而不是结合“@”
它呈现“你好第一个秒秒!”如预期。
的plunker是here
所以它意味着一个双向绑定,在模板范围VAR之前被渲染器和链接功能在踢?
我已经在我的问题提到,转变为双向绑定将使它发挥作用。只是想知道背后的原因。 – MichaelYu 2014-12-03 09:22:42
检查编辑答案。 – 2014-12-03 10:09:08
我认为这是相当自我解释现在,谢谢 – MichaelYu 2014-12-08 08:52:54