我有一个属性指令,如下所示:
directive('syncFocusWith', function($timeout, $rootScope) {
return {
restrict: 'A',
scope: {
focusValue: "=syncFocusWith"
},
link: function($scope, $element, attrs) {
$scope.$watch("focusValue", function(currentValue, previousValue) {
console.log(previousValue);
console.log(currentValue);
if (currentValue === true && !previousValue) {
$element[0].focus();
} else if (currentValue === false && previousValue) {
$element[0].blur();
}
})
}
}
});
如果我设置这样的值:
sync-focus-with="passwordfocus"
它工作正常。 Console.log将输出passwordfocus的值(在控制器中设置)
但我需要设置一个这样的值:
sync-focus-with="method+'passwordfocus'"
(方法从父指令传递,如下所示):
<simperium-auth method="create"></simperium-auth>
如果我设置这样的值,angular会将其视为字符串,而不是对范围中对象的引用。如何让它引用范围内的对象?
答案 0 :(得分:0)
在我的头发撕裂几个小时之后,我意识到在我发布这个之后该怎么做:
sync-focus-with="this[method+'usernamefocus']"
至少是一个解决方案。
答案 1 :(得分:0)
将this[method+'usernamefocus']
之类的对象表示法与HTML混合使用可能不建议使用。
我认为您正在寻找的是$scope.$eval
:
...
link: function($scope, $element, attrs) {
var value = $scope.eval(attrs.syncFocusWith);
...
$scope.$watch(value