0

AngularJSで a の値を更新したいのですが、$modalこれを行う方法がわかりません。サンプルコードは次のとおりです。

var modalInstance;

  function setupCall(data) {

    var templateURL = 'partials/Chat.html';
    var cssClass =  'medium-Modal';
     modalInstance = $modal.open({
        backdrop: "static",
        keyboard: false,
        backdropClick: false,
        windowClass: cssClass,
        templateUrl: templateURL,
        controller: function ($scope, $modalInstance) {


            $scope.updateStatus=function() {
            ...
            }
        }
    });
    modalInstance.result.then(function() {

    });
}
 // first time i call this function to open model
 setupCall(event);

モデルが正常に開いたときに、サービスから更新を受け取り、更新された値をモデルに再度表示したい場合は、モデルupdateStatus()の外部から呼び出す方法を教えてください。使ってみ modalInstance.updateStatus(..)ますがうまくいきません。誰かがこれを行う適切な方法を教えてもらえますか?

4

3 に答える 3

0

scopeにオプションを渡してから$modal、AngularJS イベントを使用できます

var modalScope = $rootScope.$new();

myService.doSomethingAsync(function (data) {
  $rootScope.$emit('some event', data);
});

$modal.open({
  scope: modalScope,
  controller: function ($scope) {

    /* ... */

    $scope.$on('some event', function() {
      $scope.updateStatus();
    });
  }
});
于 2016-07-13T13:41:55.787 に答える
0

みんな、ありがとう。これを解決するには、カスタム イベント リスナーを追加します。

 var listeners = [];

function _addEventListener(listener) {
    listeners.push(listener);
    return listener;
}

function _removeListener(listener) {
    for (var i=0; i < listeners.length; i++){
        if (listeners[i] === listener){
            listeners.splice(i, 1);
            break;
        }
    }
} 
function setupCall(data) {
   ......
    modalInstance = $modal.open({
        backdrop: "static",
        keyboard: false,
        backdropClick: false,
        windowClass: cssClass,
        templateUrl: templateURL,
        controller: function ($scope, $modalInstance) {

            var listener = _addEventListener(function (event) {
              $log.info("chat msg: "+JSON.stringify(event));
            });

            $scope.$on('destroy', function () {
                _removeListener(listener)
            });
            ...
于 2016-07-13T14:53:55.280 に答える
0

を使用$broadcastしてそのメソッドを呼び出すことができます。たとえば、ビューのコントローラー (setupCallモーダルを呼び出すか起動する場所)でサービスから更新を受け取った後、次のようにします。

$rootScope.$broadcast("dataUpdatedFoo", {newData: "bar"));

次に、モーダルのコントローラー内で、このリスナーを登録します。

$scope.$on("dataUpdatedFoo", function(e, data) {
    $scope.updateStatus();
});
于 2016-07-13T13:43:10.030 に答える