我有一个指令:
<users-table user="{{ session.user }}"></users-table>
session.user
是一个包含多个键值对的对象。
我有一个指令:
angular.module('app')
.directive('users-table', function($scope) {
return {
restrict: "E",
scope: {
currentUser: "=user"
},
templateUrl: '/js/directives/templates/users-table.html',
link: function($scope, $element, $attrs) {
console.log(currentUser);
$scope.user = currentUser;
} // link
}; // return
}]);
在这个阶段,我只是通过在模板中输出$scope.user
对象来确认它是否正确连线:
/js/directives/templates/users-table.html:
{{ user }}
但这并不能归还任何东西。我在这个简单的指令中做错了什么?
调试步骤我已经完成了:
session.user
的输出(这在指令元素之前是正确的。)编辑:似乎链接功能甚至没有被调用,因为currentUser
没有被记录到控制台。
答案 0 :(得分:0)
正确的作业是:
<users-table user="session.user"></users-table>
{{ session.user }}
将采用单一方式绑定:currentUser: "@user"
另外,如前所述,作业应该是:
$scope.user = $scope.currentUser;
最后,该指令应声明为:
.directive('usersTable'
这是因为指令需要声明中的camel case值和html中的dash划分属性
这是一个有效的jsfiddle:
答案 1 :(得分:0)
您尚未在currentUser
函数中的任何位置定义link
。因此它作为未定义(和未声明的)变量而存在。
如您所做的那样创建隔离范围预先填充链接函数内的范围,以从父范围连接或复制(或其他)。所以你真的需要这样做:
link: function($scope, $element, $attrs, User) {
console.log($scope.currentUser);
$scope.user = $scope.currentUser;
}
隔离范围
scope: {
currentUser: '=user'
}
将您的链接功能中的scope.currentUser
设置为来自父级的scope.user
。