我是棱角分明的新人。我阅读了很多关于指令隔离范围@ / =
之间差异的博客,但我仍感到困惑。
这是我试过的一个小例子。
<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.2.23/angular.min.js"></script>
<!DOCTYPE html>
<html ng-app="myApp">
<head>
<title>Directive Test</title>
<script type="text/javascript">
var app = angular.module('myApp', []);
app.controller('MyCtrl', ['$scope', function ($scope) {
}]);
app.directive('personInfo', [function () {
return {
restrict: 'EA',
scope: {
name: '=',
age: '='
},
template: "My name is {{name}} . My age is {{age}}",
link: function (scope, iElement, iAttrs) {
console.log(scope.name);
}
};
}])
</script>
</head>
<body ng-controller="MyCtrl">
<person-info name="deepak" age="25"></person-info>
</body>
</html>
输出:
My name is . My age is 25
我不明白为什么名字是undefined
,年龄为25岁。
当我在做name: @
时,一切正常。
我不确定为什么=
使用数值但不能使用字符串。我知道@
用于单向,而=
用于双向绑定,但在我的例如,我与父范围无关。
答案 0 :(得分:4)
=
是一个双向绑定,因此当您使用字符串时,它认为您正在尝试传递名为deepak
的范围变量。要传递字符串,必须将它们用引号name="'deepak'"
包装。
数字起作用的原因是因为变量不能以数字开头,所以它们被解释为一个值。
如果使用@
,它将是一个单向绑定,不能传递范围变量。这只会让您传递值,因此name="deepak"
和name="{{somevar}}"
将起作用。
答案 1 :(得分:1)
如果使用=
,则该指令期望后面的表达式有一个范围变量。
所以<person-info name="deepak">
通过$scope.deepak
告诉你有角度查找null
,在这种情况下等于=
,结果就是结果。
我想如果你输入数字是有效的,因为你不能用纯数字来命名变量,所以它会做一些聪明的猜测来替换你的值。
要在使用<person-info name="'deepak'">
时使用文字字符串,您需要添加额外的引号层
packages:
yum:
gcc-c++: []
make: []
sources:
/home/ec2-user: http://download.redis.io/releases/redis-2.8.4.tar.gz
commands:
redis_build:
command: make
cwd: /home/ec2-user/redis-2.8.4
redis_config_001:
command: sed -i -e "s/daemonize no/daemonize yes/" redis.conf
cwd: /home/ec2-user/redis-2.8.4
redis_config_002:
command: sed -i -e "s/# maxmemory <bytes>/maxmemory 500MB/" redis.conf
cwd: /home/ec2-user/redis-2.8.4
redis_config_003:
command: sed -i -e "s/# maxmemory-policy volatile-lru/maxmemory-policy allkeys-lru/" redis.conf
cwd: /home/ec2-user/redis-2.8.4
redis_server:
command: src/redis-server redis.conf
cwd: /home/ec2-user/redis-2.8.4