将模板字符串转换为变量引用

时间:2014-05-12 15:04:16

标签: angularjs

我有一个属性指令,如下所示:

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>

如果我设置这样的值,an​​gular会将其视为字符串,而不是对范围中对象的引用。如何让它引用范围内的对象?

2 个答案:

答案 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