2013-10-31 62 views
4

我特林写指令,它增加了一个新的价值对象,用于选择与NG选项。角动态地更改选择的选项从指令

但是,当我将此指令添加到选择时,项目消失。

小例子:

HTML:

<div ng:app="editor" ng:controller="BaseController"> 
    <select ng-model='m' ng-options='i.Id as i.Val for i in model.items' add-new-val='model.items'></select> 
    <select ng-model='m' ng-options='i.Id as i.Val for i in model.items'></select> 
</div> 

的javascript:

var module = angular.module('editor', []); 

function BaseController($scope){ 
    $scope.model = { 
     items: [{Id:1, Val:"_1"}] 
    } 

    $scope.m = 1; 
} 

module.directive('addNewVal',function(){ 
    return { 
     scope:{ 
      items: '=addNewVal' 
     }, 
     controller: function($scope){ 
      $scope.items.push({Id: 3, Val: "Have a nice day"}); 
     } 
    } 

}) 

jsfidle

怎么了?

+0

它不起作用,因为你已经隔离了指令的范围。它可以帮助,如果你给你正在努力实现什么更宽阔的视野。你为什么要添加项目的指令,而不是控制? – kubuntu

回答

1

由于ranru建议,您可以通过这种方式重写您的指令,使其不会清除指定的范围指令。像这样:

module.directive('addNewVal',function(){ 
    return { 
     controller: function($attrs, $scope){   
      var data = $scope.$eval($attrs.addNewVal); 
      data.push({Id: 3, Val: "Have a nice day"}); 
     } 
    }  
})