2

目前,我正面臨一個與angularjs指令相關的問題。我想將來自指令1的出口對象發送到指令2。兩個指令具有相同的控制器範圍。我嘗試從指令1發送事件到控制器,將該事件從控制器廣播到指令2並在指令2上偵聽該事件。但那是行不通的。在兄弟指令之間共享數據

指令1:

angular.module('moduleName') 
.directive('directive1', function() { 
    return { 
     restrict: 'E', 
     templateUrl: 'directive1.html', 
     scope: false, 
     link: function(scope) { 
      scope.selectOutlet = function(outlet) { 
       scope.order.entityId = outlet.id; 
       scope.navigation.currentTab = 'right'; 
      }; 
     } 
    }; 

這裏,在指令1,scope.selectOutlet()outletId設置爲scope.order.entityId。我想將該行移動/設置爲指令2保存功能。

指令2:

angular.module('moduleName') 
.directive('directive2', function(config, $rootScope, $state) { 
    return { 
     restrict: 'E', 
     templateUrl: 'directive2.html', 
     scope: false, 
     link: function(scope) { 
      scope.save = function() { 
       // Save functionality 
       // scope.order.entityId = outlet.id; This is what i want to do 
      }; 
     } 
    }; 
}); 

});

任何幫助。

回答

0

您可以使用工廠或服務。將該工廠注入您的指令。現在當你試圖將函數中的數據寫入工廠時。 `app.factory( '共享',函數(){VAR 的obj = {};

obj.setData = function(){ 
// call this function from directive 1. 
} 
return obj; 
})` 

所以,如果你有這個工廠到你的指令,你會得到2個指令數據

我會嘗試做一些的jsfiddle或plunker,如果不明確。

+0

你可以創建plunker嗎?我創建'angular.module( 'assetsApp')服務( 'SharedService',函數(){ 返回{ 共享對象:{ confirmOrdering:假 } }; });' 並注入到控制器此和指令,但沒有在控制器中獲取更新的值。 –

+0

http://jsfiddle.net/shardulpendse/02eykvwy/ 只是檢查上面的jsFiddle。雖然它不完美。但是,如果我們想要一次更改值,那麼我們可以使用廣播或使用手錶進行更改。它是第二部分。它可以被增強。 –

0

不要在第一指令

angular.module('moduleName') 
    .directive('directive1', function($rootScope) { 
    return { 
    restrict: 'E', 
    templateUrl: 'directive1.html', 
    scope: false, 
    link: function(scope) { 
     scope.selectOutlet = function(outlet) { 
      $rootScope.$broadcast('save:outlet',outlet); 
      //scope.order.entityId = outlet.id; 
      //scope.navigation.currentTab = 'right'; 
     }; 
    } 
}; 

以下和第二

angular.module('moduleName') 
.directive('directive2', function(config, $rootScope, $state) { 
    return { 
    restrict: 'E', 
    templateUrl: 'directive2.html', 
    scope: false, 
    link: function(scope) { 
     $rootScope.$on('save:outlet',function(event,data){ 
     // do staff here 
     }); 
    } 
    }; 
}); 
+0

您可以根據需要修改我的答案。但廣播應該無論如何工作。 – Ashot

+0

感謝您的回覆。但是指令2中的出口不存在。 Outlet通過函數調用在指令1中設置。 '$ rootScope。$ broadcast('save:outlet',outlet);'不起作用。 –

+0

@VishalRajole我確定了答案,請看看。 – Ashot