将全局范围变量绑定到指令局部变量

时间:2015-03-17 20:35:18

标签: angularjs angularjs-directive angularjs-scope angularjs-controller

我无法理解控制器和指令之间的范围链接。

我正在尝试做的事情(这应该有助于我学到很多东西)是在我的指令中将$scope.systems绑定到data

所以我设置了一个简单的指令调用:

<combobox data="systems"></combobox>

我也试过绑定变量,但对我来说没有意义。

<combobox data="{{systems}}"></combobox>

然后我就这样创建了我的驱动程序

.directive('combobox', function ($timeout) {
    return {
        restrict: 'E',
        replace: true,
        templateUrl: '/angular/directives/combobox.php',
        link: function (scope, element, attrs) {
            console.log(attrs.data);
            $timeout(function () {
                console.log(scope.systems);
                console.log($scope[attrs.data]);
            }, 1000);
        }
    }
});

我考虑过将一个范围参数添加到指令返回

scope: {
    'systems': '='
}

或者

scope: {
    'systems': '=data'
}

我已经能够设置简单的指令,其中值绑定到指令范围,并且它们已经工作。现在我正在尝试创建一个可重用的指令,我可以告诉它从控制器范围中使用哪些数据,而我只是卡住了。

1 个答案:

答案 0 :(得分:1)

这应该有效。虽然我不确定为什么你的模板是一个php文件...

<combobox data="foo"></combobox>
<combobox data="bar"></combobox>

app.directive('combobox', function ($timeout) {
    return {
        restrict: 'E',
        replace: true,
        scope: {
            //this will set $scope.systems
            //with the value gotten from evaluating what is in
            //the data attribute
            'systems': '=data'
        },
        templateUrl: '/angular/directives/combobox.php',
        link: function (scope, element, attrs) {
            console.log(scope.systems);
        }
    }
});
顺便说一句,不要使用replace。 Angular团队表示,它可能会很快消失,因为它造成了太多问题,而且无论如何都不是必要的。