angularjs $将字符串解析为“控制器为”方法

时间:2015-06-12 19:25:55

标签: javascript angularjs angularjs-directive angularjs-scope angularjs-ng-repeat

如何解析foo.callbacke以指向timerController.callbacke方法?

<div ng-app="timerApp" ng-controller="timerController as foo">
<div ng-repeat="item in [1,2,3,4]">
    <div watcher="{'seconds': 'foo.callbacke'}">
        {{seconds}}
    </div>
</div>

如果您愿意:http://jsfiddle.net/e86e05a1/(打开控制台)

2 个答案:

答案 0 :(得分:1)

你可以在你的指令scope中使用,这就是为什么指令可以通过$ scope自己访问控制器方法,所以这里不需要传递controllerAs别名。这里只传递方法名称。而不是通过索引编辑来访问函数,请尝试在$eval上使用scope

注意

  

除非您对属性进行插值,否则应使用$ observe   比如{{something}}

<强>标记

<div watcher="{'seconds': 'callbacke'}">

<强>代码

angular.forEach(new_watchers, function(callback, k) {
     watchers.push($scope.$watch(k, function() {
         return $scope.$eval(callback)($scope, $element);
     }));
});

Demo Fiddle

答案 1 :(得分:0)

您不能以这种方式将函数引用传递给指令。你可以做什么在指令中创建一个独立的范围,并使用=将父控制器的函数映射到指令范围。试试这个。

<强> HTML

<div callbacke="callbacke" watcher>
    {{seconds}}
</div>

<强> JS

.directive('watcher', ['$compile', '$parse', function($compile, $parse) {
    'use strict';

    return {
        restrict: 'A',
        transclude: false,
        scope: {
            callbacke: '='
        },
        controller: ['$scope', '$element', '$attrs', function($scope, $element, attrs) {
            var watchers = [];
            console.log($scope.callbacke);
            ...
            ...
        }]
        ...
        ...
    };
}]);

演示 http://jsfiddle.net/e86e05a1/1/