2015-01-15 27 views
1

我正在从一本书中学习AngularJS,其中一个例子给了我一个范围指令。我决定和它一起玩,我遇到了一些不适合我的东西。 4个范围值中的3个可以使用,但1个不会。当我使用player: '=dataPlayer'时,屏幕上的值不会被渲染,其余的工作正常。我的假设是data-保留在Angular中,但我无法在任何地方找到它。有谁知道为什么会发生这种情况?这个指令范围有什么问题?

<!--Html--> 
    <div ng-repeat="currentPlayer in players"> 
    <!-- <my-player current-player-test="currentPlayer"/> --> 
    <!-- <my-player player-data="currentPlayer"/> --> 
    <my-player data-player="currentPlayer"/> 
    <!-- <my-player data="currentPlayer"/> --> 
    <!-- <my-player player="currentPlayer"/> --> 
    </div> 

    //Angular code 
    myAppModule.directive('myPlayer', function() { 
    return { 
     restrict: 'AEC', 
     templateUrl: 'playerTest.html', //Just some simple html to display player data 
     scope: { 
     //player: '=currentPlayerTest' //WORKS 
     //player: '=playerData'   //WORKS 
     player: '=dataPlayer'   //DOES NOT WORK 
     //player: '=data'    //WORKS (example from book) 
     //player: '='     //WORKS (example per PSL's answer) 
     } 
    }; 
    }); 

回答

1

你并不需要在2路范围前缀data结合它隐含的data-剥离解析。您只需要player: '=',因为您的属性名称和隔离范围上的2路绑定属性名称是相同的。

myAppModule.directive('myPlayer', function() { 
    return { 
     restrict: 'AEC', 
     templateUrl: 'playerTest.html', //Just some simple html to display player data 
     scope: { 
     player: '=' 
     } 
    }; 
    }); 

documentation

角归一化的元件的标记和属性名称,以确定哪些元素匹配哪个指令。我们通常通过其区分大小写的camelCase规范化名称(例如,ngModel)来引用指令。但是,由于HTML不区分大小写,因此我们通过小写形式引用DOM中的指令,通常在DOM元素上使用以短划线定界的属性(例如ng-model)。

归一化处理是如下:

地带x和从元件/属性的前DATA-。 将:, - 或_分隔名称转换为camelCase。