2013-01-21 84 views
0

我试图做一个小的模态框架在我的应用程序..问题NG-点击和NG-显示

继承人我的控制器:

function ModalCtrl($scope){ 
    $scope.openModal = function(name){ 
     $scope.modalStatus = true; 
    } 
    $scope.closeModal = function(name){ 
     $scope.modalStatus = false; 
    } 
    $scope.modal = function(){ 
     return $scope.modalStatus; 
    } 
    $scope.modalStatus = false; 
} 

而且继承人的HTML:

<div ng-controller="ModalCtrl"> 
    <div ng-show="modal()" class="modal_window"> 
    <h2>The title</h2> 
    <span>The content</span> 
    <a ng-click="closeModal()">Close</a> 
    </div> 
</div> 

<div ng-controller="ModalCtrl"> 
    <a ng-click="openModal('xyz')">Open it up</a> 
</div> 

只是完全不工作..不能更糊涂

编辑:用的jsfiddle更新:http://jsfiddle.net/TeYfY/

回答

3

我还没有详细检查过你的代码,但是你的ngClick被定义为以外的ngController,所以它无法访问openModal函数。你会需要它的控制器内部的范围,如访问方法:

<div ng-controller="ModalCtrl"> 
    <div ng-show="modal()" class="modal_window"> 
    <h2>The title</h2> 
    <span>The content</span> 
    <a ng-click="closeModal()">Close</a> 
    </div> 

    <a ng-click="openModal('xyz')">Open it up</a> 
</div> 

如果还有比这更多的问题,请随时发布Plunker或的jsfiddle和更新您的问题,我会很高兴仔细观察并修改我的答案。

PS:此代码属于指令。

更新

在评论中提到,他要控制从其他位置的模态的OP。这通常是完成与服务:

module.factory('ModalService', function() { 
    var is_visible = false; 

    return { 
    isVisible: function (value) { 
     if (angular.isDefined(value)) { 
     is_visible = value; 
     } else { 
     return is_visible; 
     } 
    } 
    }; 
}); 

在模态指令,一个可以监听的服务状态:

$scope.$watch(ModalService.isVisible, function (status) { 
    $scope.isVisible = status; 
}); 

而从遥远的控制器,一个可以改变状态上服务:

$scope.openModal = function() { 
    ModalService.setVisible(true); 
} 

这是高度设计和过度简化,但它应该说明这一点。除了服务之外,还可以使用事件来完成组件间通信,但在大多数情况下,服务更加干净。

+0

链接实际上是在我的实际代码中ng控制器(只是忘了在这个例子中)..更新jsfiddle虽然 – Elliot

+0

@Elliot其实,我的答案仍然存在。当你多次使用ngController时,你会得到*两个单独的作用域*,所以你的变量不会在与模态相同的作用域中发生变化。结合他们就像我在我的答案,它工作得很好:http://plnkr.co/edit/yKX8RflMawhb9XxdtdgT?p=preview –

+0

嗯,它们位于我的用户界面的不同部分虽然..这就是为什么它应该是一个指示? – Elliot