如何使angular指令分别接受字符串或模型

时间:2015-03-03 22:24:42

标签: angularjs angularjs-directive

我正在尝试创建一个能够获得BOTH模型对象和字符串的angular指令 如果指令得到一个字符串,它只输出HTML,但如果它是一个模型,该指令将观察模型的变化并分别输出数据。

我曾尝试使用下一个代码:

App.directive('iso2symbol', function () {
    return {
        restrict: 'E',
        replace: true,
        link: function ($scope, $element, $attrs) {
            var curIsoObj = $scope.$eval($attrs.curIso);
            //this is object it may change
            if (typeof curIsoObj !== 'undefined') {
                console.log('not a text');
                $scope.$watch('curIso', function (value) {
                   console.log(value);
                });
            }
        },
        template: '<span>{{currencySymbol}}</span>'
    }
}]);

这不起作用,我用Google搜索了很长时间,但我找不到问题....

这里是JSfiddle的链接,我在其中设置了DEMO

2 个答案:

答案 0 :(得分:0)

小心你正在看的东西。

根据您的监视功能,您正在观看$ scope.carUso,它实际上不是范围对象。

你应该看着

$scope.$watch(function(){return $scope.$eval($attrs.curIso);}, function (value) {
    $scope.txt = value;
});

答案 1 :(得分:0)

试试这个:

App.directive('iso2symbol', function () {
    return {
        restrict: 'E',
        replace: true,
        require: 'ngModel',
        scope: {
            curIso: '='
        },
        link: function ($scope, $element, $attrs) {
            $scope.$observe('curIso', function(newValue, oldValue){
                var curIsoObj = newValue;
                // Do your test now to see if it's undefined,
                // a string, or generic object.
                // (the first time it will likely be undefined)
            }
        },
        template: '<span>{{currencySymbol}}</span>'
    }
}]);