2015-10-03 45 views
0

我的想法是使模板(对于问题)可以在旁边元素中选择。

为了在angularjs中创建一个旁路元素,我尝试了dbtek/angular-aside。这工作相当不错,但我的问题是,我必须将模板存储在一个额外的模板文件中,我需要更改现有的$ scope变量(以在表单中设置模板)。

实施例:

create_question.html(按钮打开搁置元件&显示模板变量)

<button type="button" class="btn btn-default btn-lg" ng-click="openAside('left')"> 
    <span class="glyphicon glyphicon-align-justify"></span> Right 
</button> 

Choosen template is {{choosenTemplate}} 

create_question.js(VAR为choosen模板,函数打开搁置元件&函数来更改模板var)

$scope.choosenTemplate = 0; // 0 = default 

$scope.openAside = function(position) { 
    $aside.open({ 
    templateUrl: 'aside.html' 
    placement: position, 
    backdrop: true, 
    controller: function($scope, $modalInstance) { 
     $scope.ok = function(e) { 
     $modalInstance.close(); 
     e.stopPropagation(); 
     }; 
     $scope.cancel = function(e) {     
     $modalInstance.dismiss(); 
     e.stopPropagation(); 
     }; 
    } 
    }) 
}; 

$scope.setTemplate = function(templateNumber) 
{ 
    $scope.choosenTemplate = templateNumber; 
} 

aside.html(模板aside元素 - 内容无关)

<div> 
    <button ng-click="setTemplate(2)">Template 2</button> 
</div> 

的搁置元件被示出,但是当我按下按钮的功能不会被调用。

当我改变

aside.html

<div ng-controller="CreateQuestionCtrl"> 
    <button ng-click="setTemplate(2)">Template 2</button> 
</div> 

函数被调用,但现在我有两个不同的$范围(我认为)?而且我只能改变错误的$ scope元素(在旁边)。

闯闯是设置的模板在<script> - 元素这样的:

<script type="text/ng-template" id="aside.html"> 
    <button ng-click="setTemplate(2)">Template 2</button> 
</script> 

,并设置create_question.html这里面的元素,但现在我不能再次调用该函数。

有没有人有一个想法,我可以在“两个不同的”页面上有相同的$范围?两者都在同一页面上,但我不能真正访问相同的$范围。

回答

2

可能有更好的方法来在主控制器和旁路控制器之间进行通信,但它可能按原样运行。

$aside只是ui-bootstrap $modal的一个包装。上面的例子并不使用scope parameter

scope - 用于模态的内容的作用域实例(实际上 的$模式服务将创建一个提供 范围的子范围)。默认为$ rootScope

设置模态和父控制器作用域之间的关系是非常重要的。

$aside.open({ 
    scope: $scope, 
    ... 

应该让应用程序正常运行。