我在http://jsfiddle.net/gsche/1/
上写了一些简化代码单击“刷新”链接时,“customer.name”模型不会更新视图。
我在本地计算机上编写了代码,并在Chrome中使用Batarang进行了调试。
控制台未显示任何错误。 Batarang中的Model页面显示右侧更改的客户名称,与旧范围ID相关联,但$ scopes的ID也会更改。
有人能指出我正确的方向吗?
<div ng-app>
<div ng-controller="MainCtrl">
<p> <a href="#" ng-click="Refresh()">Refresh</a> </p>
<p>
<input type="text" ng-model="customer.name">
</p>
<p>{{ customer.name }}</p>
</div>
</div>
function MainCtrl($scope) {
$scope.customer = {
name: 'TTT',
id: 0
};
$scope.Refresh = function ($scope) {
$scope.customer.name = 'Test';
};
}
更新1 08.08.2013 谢谢大家(@EpokK,@Stewie,@希波克拉底)。我现在不知道jsfiddle的问题,这个例子可以正常工作。
但是,在我的测试应用程序中,{{customer.name}}绑定有效,但“刷新”点击仍然不会更改视图中的{{customer.name}}。
以下是我的申请内容。我认为它与jsfiddle示例相同:
的index.html
<!doctype html>
<head>
<title>Test</title>
</head>
<body ng-app="roaMobileNgApp">
<script src="scripts/angular.js"></script>
<script src="scripts/angular-ui.js"></script>
<link rel="stylesheet" href="scripts/angular-ui.css">
<div class="container" ng-view=""></div>
<script src="scripts/app.js"></script>
<script src="scripts/controllers/main.js"></script>
</body>
</html>
app.js
'use strict';
angular.module('roaMobileNgApp', ['ui'])
.config(function ($routeProvider) {
$routeProvider
.when('/', {
templateUrl: 'views/main.html',
controller: 'MainCtrl'
})
.otherwise({
redirectTo: '/'
});
});
main.js
'use strict';
angular.module('roaMobileNgApp')
.controller('MainCtrl', function ($scope) {
$scope.customer = {name: '',
id: 0};
$scope.getDetails = function() {
$scope.customer.name = 'Test';
};
});
main.html中
<div ng-controller="MainCtrl">
<a href="#" ng-click="getDetails()">Refresh</a>
<p><input type="text" ng-model="customer.name"> {{ customer.name }} </p>
</div>
答案 0 :(得分:3)
检查我的解决方案,我编辑了你的JSFiddle:http://jsfiddle.net/gsche/10/
function MainCtrl($scope) {
$scope.customer = {
name: 'TTT',
id: 0
};
$scope.getDetails = function () {
$scope.customer.name = 'Test';
};
}
答案 1 :(得分:2)
只需在小提琴选项中选择“No wrap-in”(因为否则您的演示将无效),并从$scope
函数中删除Refresh
参数。您不需要传入$scope
,因为函数本身是在$ scope内定义的。
$scope.getDetails = function(){
$scope.customer.name = 'Test';
};
答案 2 :(得分:0)
这就是你加载脚本的方式。
我喜欢在正文末尾加载包含控制器的app.js后面的角度:
...
<script src="/assets/js/angular.min.js"></script>
<script src="/assets/js/app.js"></script>
</body>
为了让你的小提琴工作,我所做的只是将它从“onReady”更改为“in body”(这是左上角附近的小下拉菜单。)
检查出来:http://jsfiddle.net/gsche/3/
onReady意味着你的控制器定义被jsfiddle包含在onReady函数中。当角度加载并开始工作时,你的控制器仍未定义,角度必须继续并吐出原始模板。