2016-05-18 44 views
1

我在使用angularJs的选择框中遇到ng模型问题。 控制器功能中的模型值未更新。但是,当选择框放置在主模板中时,它确实反映了控制器中的更改,而不是放置在指令模板中时的更改。在main.html中选择框的ng模型不反映控制器功能的变化

<select ng-model="selectedGuest" id="guests-sel" 
    ng-change="doSearchByFilterDropdown($event, selectedGuest.key, 'guests')" 
    ng-options="guest as guest.value for guest in guests track by guest.key"> 
</select> 

工作正常,这是main.html

<div ng-init="init()"> 
    <div class="content-wrapper"> 

     <div ng-if="selTemplate == 'tourism'"> 
      <!-- Does not work reflect changes when changedin this directive template --> 
      <search-results-tourism></search-results-tourism> 
     </div> 
     <!-- Select Box ng-model value reflects in controller when placed here, 
      but not in directive template --> 
     <select ng-model="selectedGuest" id="guests-sel" ng-change="doSearchByFilterDropdown($event, selectedGuest.key, 'guests')" 
      ng-options="guest as guest.value for guest in guests track by guest.key"> 
     </select> 

    </div> 
</div> 

不中指令模板工作。之前我使用ng-include作为模板,但我认为这是因为ng-include创建的新范围,因此我用指令替换了它,但仍然无法工作任何Idea。 ?

这是指令

<search-results-tourism></search-results-tourism> 
... 
.directive('searchResultsTourism', function() { 
    return { 
     restrict: 'E', 
     scope: false, 
     templateUrl : 'views/search-results-tourism.html' 
    }; 

调用指令中的模板相同的选择框不会让NG-模型值更新在控制器

+0

什么是指令模板,以及如何设置/操作链接函数中的选择数据,您如何在页面中包含指令? – ste2425

+0

编辑细节 – Adeel

+0

我认为这是一个范围问题..你不能在父指令/控制器 – MayK

回答

6

https://docs.angularjs.org/api/ng/directive/ngIf

NG,如果以创建一个新的作用域为您的指令。

从文档:

注意,当使用ngIf被除去的元素其范围被破坏并恢复元件时将创建一个新的范围。 ngIf中创建的范围使用原型继承从其父范围继承。其中一个重要的含义是如果在ngIf中使用ngModel绑定到在父范围中定义的javascript基元。在这种情况下,对子作用域内的变量所做的任何修改都会覆盖(隐藏)父作用域中的值。

+0

哦,等等。我还有其他的恩 - 如果还有,你是绝对正确的。这是因为ng-if – Adeel

+0

非常感谢您节省了我的一天 – Adeel

相关问题