【发布时间】:2023-08-11 15:27:01
【问题描述】:
我对何时呈现 AngularJS 指令中的“模板”感到有些困惑。见以下代码sn-ps:
<!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 First One”,这意味着控制器和链接函数中的第一条语句都没有更改范围内名称的值,或者更改未反映在模板中。
但是,如果我将指令更改为
template: '<p>Hello {{name2}}!</p>'
或通过使用“=”而不是“@”将“名称”更改为双向绑定
它呈现“Hello First ONE Second Second !”正如预期的那样。
小偷是here
那么这是否意味着单向绑定,模板中的作用域变量在控制器和链接函数启动之前呈现?
【问题讨论】:
标签: javascript angularjs angularjs-directive