我有点担心我们是否可以创建多个控制器实例,并以嵌套形式创建例如 -
<div ng-controller="abc">
<form ng-submit="call()">
<input type=text ng-model="content"/>
</form>
<div ng-controller = "abc">
<form ng-submit="call()">
<input type=text ng-model="content"/>
</form>
</div>
</div>
Run Code Online (Sandbox Code Playgroud)
我只是想知道,如果我使用与其他控制器实例相同的模型,那么模型值将相同或不同.与静态变量类似?
我正在学习AngularJs,但我无法使它成功.我读到了摘要周期,但对我来说并不清楚.很明显,这个代码失败了,因为进入一个无限循环,但我不知道如何解决它.有人能帮助我吗?
<!DOCTYPE html>
<html lang="eng" ng-app="test">
<head>
<title>Learning Angular</title>
<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.2.9/angular.js"></script>
<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.2.9/angular-route.js"></script>
<script type="text/javascript">
var app = angular.module('test', ['ngRoute']);
app.factory('visitCounterService', function () {
var counterService = function() {
var _count = 1;
var counter = function() { return _count++; };
return { counter: counter }
}();
return counterService;
});
app.service('homeModel', ['visitCounterService', function(visitCounterService){
this.getTitle = function() {
var n = visitCounterService.counter();
return "Welcome to this awesome demo. You are the visitor n° " + n;
};
}]);
app.controller('homeController', ['$scope', 'homeModel', …Run Code Online (Sandbox Code Playgroud) 根据我读到的最佳实践,在我的控制器中,我将模型分配给$ scope而不是将多个单独的值分配给$ scope:
.controller('TestCtrl', function AboutCtrl($scope, $http) {
var model = {
name: 'Bob',
address: 'Squaresville'
}
};
$scope = model;
})
Run Code Online (Sandbox Code Playgroud)
在我的模板中:
<input type="text" ng-model="model.name" /> {{model.name}}
<input type="text" ng-model="model.address" /> {{model.address}}
Run Code Online (Sandbox Code Playgroud)
但是当页面最初加载时,文本框没有任何价值.但是当我输入时,匹配的{{...}}标签会更新.
为什么初始值不会更新?
我有这个代码:
$scope.startTimer = function (){
$scope.settings.showMinutes = false;
$scope.settings.showStart = false;
$scope.settings.showPause = true;
$scope.settings.showReset = true;
$scope.settings.showDonate = false;
if ($scope.settings.seconds <= 0) {
$scope.settings.seconds = 59;
$scope.settings.minutes -= 1;
if ($scope.settings.minutes < 0) {
$scope.settings.showPause = false;
$scope.settings.stopTimer = true;
return;
}
setTimeout('startTimer()', 1000);
} else {
$scope.settings.seconds -= 1;
setTimeout('startTimer()', 1000);
}
}
Run Code Online (Sandbox Code Playgroud)
当我启动startTimer功能时,我收到错误:
未捕获的ReferenceError:未定义startTimer(匿名函数)
我究竟做错了什么?
我有一个页面,我想打印一些标签的值,我已经在JSON对象中:
$scope.countries = [
{
"key": "NL",
"value": "Netherlands"
},
{
"key": "BE",
"value": "Belgium"
},
{
"key": "TR",
"value": "Turkey"
},
{
"key": "PL",
"value": "Poland"
}
]
Run Code Online (Sandbox Code Playgroud)
所以我在范围内有国家/地区代码,并希望使用过滤器来替换实际国家/地区名称的代码.因此我实现了这样的过滤器:
{{formulier.country | fetchname }}
Run Code Online (Sandbox Code Playgroud)
我正在尝试构建的过滤器应该在上面的国家/地区范围内搜索国家/地区代码(密钥),并返回这些(值)的国家/地区名称.我开始使用这个过滤器,但不幸的是我没有让它工作.
app.filter('fetchname', function() {
return function(input, all) {
angular.forEach($scope.countries, function(key, value) {
if (key === input) {
return value;
}
});
}
});
Run Code Online (Sandbox Code Playgroud)
我必须对我的过滤器进行哪些更改才能在AngularJS中使用它?如何将'NL'替换为'荷兰'?
我试图使用AngularJS做一个http帖子,但angular不会将我的$scope变量转换为JSON.
这是我的代码:
$http({
method: "POST",
url: "/Account/Login",
data: $scope
})
Run Code Online (Sandbox Code Playgroud)
这导致请求POST消息有
"$SCOPE"
Run Code Online (Sandbox Code Playgroud)
但如果我将其更改为输出我的任何范围属性,它将发送具有正确属性的消息,例如:
$http({
method: "POST",
url: "/Account/Login",
data: { email: $scope.email, password: $scope.password }
})
Run Code Online (Sandbox Code Playgroud)
这导致请求POST消息有
{"email":"asdasd@Asdasd.asd","password":"asd"}
Run Code Online (Sandbox Code Playgroud)
我总是要像这样包裹我的请求吗?或者有没有办法告诉AngularJS发送范围内的所有属性?任何Pro/Con?
我在我的控制器中有一个函数,我希望能够从$ scope方法调用,所以我只能在控制器中重用我的代码.我使用该函数来清除一些输入字段.我想在插入用户后调用,并且我想将其分配给"清除"按钮单击.插入后调用函数工作正常,但不是将函数赋值给方法.
如果我将函数直接分配给$ scope.clearUser方法,它可以工作,但是在插入用户后我无法调用它.
function clearUser() {
$scope.EmployeeNumber = '';
$scope.isAdmin = false;
};
$scope.clearUser = clearUser();
//also tried $scope.clearUser = this.clearUser();
//$scope.clearUser = function() {
// $scope.EmployeeNumber = '';
// $scope.isAdmin = false;
//};
<button ng-click="clearUser()" class="btn btn-default">
<i class="fa fa-times"></i> Clear
</button>
Run Code Online (Sandbox Code Playgroud) 我正在创建两个使用相同控制器的指令,因此我看到两个指令在控制器之间共享数据.我想要的是每个指令的数据都是UNIQUE,因此不应该共享数据.
var app = angular.module("app",[]);
app.controller('myCtrl', function($scope){
$scope.data = {
name: 'Javier'
};
});
app.directive('dir1', function(){
return {
template: "<div style='background:red'><input type='text' ng-model='data.name'>{{data.name}}</div>",
controller: "myCtrl"
};
});
app.directive('dir2', function(){
return {
template: "<div style='background:yellow'><input type='text' ng-model='data.name'>{{data.name}}</div>",
controller: "myCtrl"
};
});
Run Code Online (Sandbox Code Playgroud)
https://jsbin.com/vetikuvada/1/edit?html,js,output
因此,在我的示例中,我想要的是当我在其中一个文本框中编辑文本时,它不会触发其他文本框中的更改.我知道控制器部署了不同的实例,但不知怎的,它们共享范围,我需要完全不同.这可能吗?
该示例是一个非常复杂的应用程序的一小部分,所以我必须能够使用这种方法而不是其他方法.
javascript angularjs angularjs-directive angularjs-scope angularjs-controller
所有,
当涉及到指令时,我对angularjs的理解是当你有一个像这样的隔离范围设置时:
scope: {
dataSource: '='
}
Run Code Online (Sandbox Code Playgroud)
在链接功能内: function(scope, ele, attr)
如果像这样使用,scope将有一个dataSource绑定到name我的控制器上的属性:
<my-element data-source='name'></my-element>
然而事实并非如此,这是一个例子:
http://jsfiddle.net/HB7LU/21879/
谢谢
史蒂夫
我有一个问题,当我编辑数据时,我的网址没有显示id示例:/answer/1 or /answer/2 or /answer/3等我很困惑,因为我使用UI ROUTER
我是初学者使用UI ROUTER angularjs.你能帮助我吗 ?我该怎么办 ?谢谢
我的路由代码:
.state({
name: 'answer',
url : '/answer/',
params : {
obj : null
},
controller: 'answer-controller',
templateUrl: 'templates/table-answer.html'
})
Run Code Online (Sandbox Code Playgroud)
ng-click转到表格答案:
<button type="button" class="btn btn-default" ng-click="ListAnswer(data.item)"><i class="fa fa-eye"></i> View Answer</button>
Run Code Online (Sandbox Code Playgroud)
将params $ scope.ListAnswer传递给answer-controller.js
$scope.ListAnswer = function(data) {
$state.go('answer', {obj : data});
};
Run Code Online (Sandbox Code Playgroud) angularjs angularjs-scope angularjs-routing angular-ui-router