在angular中是否可以将$ scope属性移动到控制器范围?

时间:2015-01-27 17:11:14

标签: angularjs scope this

我现在正在创建一个嵌套控制器,父控制器传入一个变量,如下所示:

app.directive('entity', function() {
    return {
        restrict: 'E',
        controller: 'EntityShowController',
        templateUrl: '/show.html',
        controllerAs: 'showCtrl',
        scope: {
            entity: '=' // two way binding parent/child
        }
    };
})

在模板中我有:

<entity entity="parent.getSelected()"></entity>

现在在子控制器中,我可以这样做:

app.controller('EntityShowController', function($scope) {
    // this is what I should do to access the passed in two-way sync entity
    console.log($scope.entity);

    // this is what I like to achieve
    this.entity = $scope.entity;
    $scope.entity=null;
}]);

是否可以设置控制器本地数据(this属性)来跟踪父控制器数据($scope属性)?

我知道我可以将setEntity方法与ng-click结合起来(例如),但这并不是我想要实现的目标。

1 个答案:

答案 0 :(得分:1)

如果你使用的是1.3.x版本的angular,你可以在指令设置上设置bindToController标志来说明将双向绑定范围属性绑定到控制器实例,如果你低于1.3.x这个选项不可用,您需要直接在作用域上工作,或者您需要建立同步机制以在控制器实例和作用域属性之间进行同步。

.directive('entity', function() {
    return {
        restrict: 'E',
        controller: 'EntityShowController',
        templateUrl: '/show.html',
        controllerAs: 'showCtrl',
        bindToController:true,
        scope: {
            entity: '=' // two way binding parent/child
        }
    };
})