我认为最佳做法是模板应将$ scope视为只读,控制器应将它们视为只写。我犯下了以下做法(由于其简单性),以及替代以下内容的最佳做法是什么?
angular.module('myApp', [])
.controller('MainController', function ($scope) {
var vm = {};
$scope.vm = vm;
vm.setItem = function (item) {
// Is reading vm data here considered bad? What is better way?
if (vm.selectedItem === item) {
vm.message = 'Please select a different item';
return;
}
vm.message = 'You selected: ' + item.id;
vm.selectedItem = item;
};
activate();
function activate() {
var items = [];
for (var i = 1; i <= 15; ++i) {
items.push({id: i, display: 'Item ' + i});
}
vm.items = items;
}
});
&#13;
<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.2.23/angular.min.js"></script>
<div ng-app="myApp" ng-controller="MainController">
<h3>{{vm.message}}</h3>
<div ng-repeat="item in vm.items">
<a href="#" ng-click="vm.setItem(item)">{{item.display}}</a>
</div>
</div>
&#13;
这是一个非常天真的例子,但我觉得以这种方式阅读范围数据的需要很多,它应该在哪里生活?上面是上面接受的模式吗?
我知道selectedItem
可以作为第二个参数传递给setItem
方法,但这看起来更糟糕的是视图现在对控制器逻辑的工作方式有一些内部知识(即通过setItem设置selectedItem。