2016-03-17 139 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過去了,在控制器的變量變爲可用。確實是我在找!

相關問題