我有類似下面的指令:角指令代碼更改範圍,但是模板顯示相同的數值
.directive('myDirective', function() {
return {
restrict: 'AE',
replace: true,
templateUrl: '/myDirective.html?v=' + window.buildNumber,
link: function (scope, element, attrs) {
scope.itemClasses = attrs.itemClasses || '';
}
}
})
,它的模板看起來像:
<div class="my-directive">
<div class="items" ng-repeat="item in items">
<div class="item {{ itemClasses }}">{{ item.title }}</div>
</div>
</div>
和指令調用不同地址(每個模板一個呼叫),如下所示:
<my-directive item-classes="col-md-6"></my-directive>
...
<my-directive item-classes="col-md-12"></my-directive>
並且所有模板都呈現相同的值itemClasses
。同時鏈接功能設置適當的值(我通過console.log()
的電話查看了這個事實)。
如果我將scope: true
屬性添加到指令的代碼 - 那麼一切正常。所以,它似乎有自己的繼承範圍幫助。你能解釋我這種行爲嗎?
謝謝。
謝謝你的解釋!請讓我總結一下,確定我說得對。所有'link'函數都在任何模板呈現之前調用。所以,我的代碼只覆蓋了作用域中的相同屬性。當涉及到渲染模板時,我只有最後一個賦值。對? – dizpers
那麼,範圍:真正的方法是正確的嗎?還是有更好的? – dizpers
簡而言之:在範圍爲false的情況下,您使用父級的範圍。所以你總是在父級的範圍內設置相同的變量。所以你總是重寫相同的變量。對於正確的方法,它取決於你要用這個值做什麼。你將如何處理itemClasses?當控制器中的某些變量發生變化時,您需要更改它們嗎? – quirimmo