Angular指令:传递范围对象

时间:2016-03-17 19:28:27

标签: javascript angularjs angularjs-directive

我得到了一个指令,其中有一个由属性传递的模型:

使用严格;

angular.module('ebs-front')
.directive('ebsIa', function() {
    return{
        restrict: 'A'.
        scope: {
            opened: '=ebsIaOpened',
            model: '=ebsIaModel',
            cb: '&ebsIaCb'
        },
        controller: function($scope, $uibModal){
            console.log('check');
            $scope.text = { text: 'test'};
            $scope.$watch('opened', function(newValue) {
                if(newValue === true){
                    var modalInstance = $uibModal.open({ 
                        controller: 'ImpactAnalyseController',
                        templateUrl: 'common/directive/ebs-ia-template.html'                
                    });
                }
            });
        }
    }   
});

在这个指令中,我需要做一些操作,然后打开一个模态窗口。所以很好,但问题是,我希望在scopeAnalysisController中也可以访问$ scope.model。

我的假设是$ scope.test和$ scope.model将自动在ImpactAnalysisController中可用,但显然创建了一个仅对控制器有效的隔离范围:功能部分。

将范围的模型变量传递给ImpactAnalysisController会有什么好方法?!为什么它不是角度的默认行为?

如果我像下面那样定义我的指令,那么指令中的removeFromFilters(在这种情况下)是可用的,所以我有点困惑。任何帮助将不胜感激......

use strict;

angular.module('ebs-front')
.directive('ebsIa', function() {
    return{
        restrict: 'A'.
        scope: {
            opened: '=ebsIaOpened',
            model: '=ebsIaModel',
            cb: '&ebsIaCb'
        },
        controller: 'ImpactAnalysisController'
        };          
)};

3 个答案:

答案 0 :(得分:0)

有几种方法可以在Angular中的控制器之间共享数据。想到一对夫妇:

1-使用$ rootScope.broadcast('keyName',value)并使用$ scope.on监听值('keyName',function(){...}谨慎使用,而不是最好的方法时间

2-保留数据不在控制器中但在服务或工厂中,并将其注入控制器(最好)

答案 1 :(得分:0)

  

将范围的模型变量传递给ImpactAnalysisController的好方法是什么?!

取决于控制器可以访问和打算使用它。

  

为什么它不是角度的默认行为?

你问的是错误的问题。您选择了隔离范围。如果您想从其父级继承属性,为什么选择隔离范围?

什么可以解决您的问题:

如果您传递的是纯模型,并希望有一些用户可能会改变模型的IO,我建议您阅读并实施:NgModelController

它将通过注射控制器使您的指令可以与模型和机制进行交互,而与您选择的范围类型无关。您所要做的就是根据$compile documentation要求'ngModel'。

答案 2 :(得分:0)

修复了uibmodal的解析功能:

        Gdx.gl.glEnable(GL20.GL_BLEND);
        Gdx.gl.glBlendFunc(GL20.GL_ZERO, GL20.GL_SRC_COLOR);
        batch.setProjectionMatrix(getStage().getCamera().combined);
        batch.enableBlending();
        batch.setBlendFunction(GL20.GL_ZERO, GL20.GL_SRC_COLOR);
        batch.begin();

        Gdx.gl.glEnable(GL20.GL_BLEND);
        Gdx.gl.glBlendFunc(GL20.GL_ZERO, GL20.GL_SRC_COLOR);
        batch.draw(lightBufferRegion,0, 0, getStage().getWidth(), getStage().getHeight());
        batch.end();
        batch.setBlendFunction(GL20.GL_SRC_ALPHA, GL20.GL_ONE_MINUS_SRC_ALPHA);

项目从父作用域传递到ModalInstanceCtrl,并在控制器中作为变量可用。我正在寻找!