2016-03-17 150 views
0

我得到了一个指令,它有一个属性传递的模型:Angular指令:传递作用域对象

use strict;

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'     
        }); 
       } 
      }); 
     } 
    } 
}); 

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

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

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

如果我像下面那样定义我的指令,那么removeFromFilters(在本例中)IS在指令中可用,所以我有点不解。任何帮助将不胜感激...

use strict; 

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

添加代码而不是屏幕截图 –

+0

您面临的问题是您无法从属性获取值到您的控制器..正确..? –

+0

的确,我将ebsIaModel传递给带有属性的指令。我期待$ scope.model在ImpactAnalysisController中包含该对象。 –

回答

0

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

1-使用$ rootScope.broadcast('keyName',value)并用$ scope.on('keyName',function(){...}小心,不是最好的方法大部分时间

2-保持数据未在控制器但是在服务或工厂,并注入到这一点你的控制器(最好)

+0

默认角度服务是单身吗? –

+0

是的,服务是单身人士。 –

0

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

取决于控制器有权访问和打算如何使用它。

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

你在问错误的问题。你选择了一个隔离范围。你为什么选择一个隔离范围,如果你想继承父类的属性?

什么可以解决你的问题:

如果你传递一个纯粹的模型,并期望有一些IO其中用户很有可能会改变模式,我建议阅读并执行:NgModelController

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

+0

也许是正确的,但在第二个代码块中,指令的模型变量可以在ImpactAnalysisController中访问。它看起来像是因为controller:function($ scope,$ uibModal){在该函数内创建了一个在线valide **。或者我在这里误解了什么? –

+0

进入控制器的$ scope不是在那里创建的,而是从上下文注入的。我不知道你的$ uibModal是如何写出来的,所以我不能客观评论如何使它做你想做的事情。 – tempoc

0

修正了uibmodal的决心功能:

var modalInstance = $uibModal.open({ 
     animation: $scope.animationsEnabled, 
     templateUrl: 'myModalContent.html', 
     controller: 'ModalInstanceCtrl', 
     size: size, 
     resolve: { 
     items: function() { 
      return $scope.items; 
     } 
     } 
    }) 

项目是从父范围的ModalInstanceCtrl过去了,在控制器的变量变为可用。确实是我在找!

相关问题