AngularJS-获取一个输入值并将其传递给父指令作用域
AngularJS - Getting an input value and passing it to parent directive scope
假设我有一个指令和一个控制器。
这是我的现场演示:http://embed.plnkr.co/LfLo0M8tVJyFNpJML5MU/
我正在尝试在Directive的模板中设置一个输入字段,您可以在其中键入一个单词,然后按Reverse来反转字符串并更新控制器的peractive。
但我在这条线上得到了:TypeError: Cannot read property 'split' of undefined
at Scope.$scope.reverseName
(26):$scope.reversedName = $scope.getName.split("").reverse().join("");
。
你可以查看上面的plunker链接,或者这里是我的代码:
app.js:
var app = angular.module('directive.main', []);
app.directive('myThing', function() {
return {
restrict: 'EA',
controller: 'Controller',
scope: {
reverse: "&",
name: "@",
getName: "="
},
templateUrl: 'template.html'
};
});
app.controller('Controller', ['$scope', function($scope) {
$scope.getName = "Rudolph";
$scope.reversedName = $scope.getName.split("").reverse().join("");
$scope.reverse = function() {
$scope.reversedName = $scope.getName.split("").reverse().join("");
$scope.name = $scope.getName;
};
}]);
template.html:
<div>Name:
<input placeholder="Type to reverse the string atop!" type='text' ng-model="getName" />
</div>
<div>Reversed Name: {{reversedName}}</div>
<input type='button' ng-click='reverse()' value='Reverse Name' /> for {{getName}}
以及index.html:中的控制器
<body ng-controller="Controller">
<div>
<strong>Parent Scope:</strong>
<br /> Name: {{getName}}
<br />Reversed Name: {{reversedName}}
</div>
<br />
<strong>Isolated Directive's Scope</strong>
<my-thing reverse="reverseName()"></my-thing>
</body>
我做错了什么?为什么我的{{getName}}
没有在父级中更新?但我不知道如何传递信息。
谢谢。
您遇到的问题是没有附加指令和控制器。因此,控制器不知道在指令模板的ng模型属性中定义的$scope.getName变量。我还删除了ng-controller属性,因为该指令将一个控制器锁存在其自身中。
我改变了模板和Angular代码,现在当你点击反向名称按钮时,你会得到反向名称。
app.js
var app = angular.module('directive.main', []);
app.directive('myThing', function() {
var controller = ['$scope', function($scope) {
$scope.name = "Well dude";
}];
return {
restrict: 'EA',
controller: 'Controller',
scope: {
reverse: "&",
name: "@",
getName: "="
},
templateUrl: 'template.html'
};
});
app.controller('Controller', ['$rootScope', '$scope', function($rootScope, $scope) {
$rootScope.getName = "Rudolph";
$rootScope.reversedName = $rootScope.getName.split("").reverse().join("");
$scope.reverse = function() {
$scope.reversedName = $scope.getName.split("").reverse().join("");
$scope.name = $scope.getName;
$rootScope.reversedName = $scope.reversedName;
$rootScope.getName = $scope.getName;
};
}]);
template.html
<div>Name:
<input placeholder="Type to reverse the string atop!" type='text' ng-model="getName" />
</div>
<div>Reversed Name:
{{reversedName}}
</div>
<input type='button' ng-click='reverse()' value='Reverse Name' /> for {{getName}}
希望这对有帮助
相关文章:
- 从控制器继承了隔离的作用域以生成可重用的指令
- 对父作用域的指令更新延迟了一步
- 两个指令创建新的继承的和隔离的作用域-元素得到哪个
- AngularJS指令隔离作用域
- 访问多个指令的隔离作用域
- 如何在html中以角度显示自定义指令的作用域
- 如何在隔离作用域指令中访问此作用域变量
- 如何为通过ng-view指令或ng-controller指令创建的每个新作用域设置侦听器
- AngularJs,在没有隔离的情况下将指令属性添加到作用域
- 如何在angularjs中将多个作用域变量传递到自定义指令中
- 从指令链接函数监视控制器作用域
- 当指令中已经给定作用域时,如何访问控制器中声明的函数
- AngularJS:如何调用指令中定义的函数'控制器的作用域
- 无作用域指令-如何获取数据
- AngularJS:ng repeat未在作用域指令内执行
- 隔离作用域指令不会对更改做出反应:angularjs
- 带有双向绑定的孤立作用域指令不能反映控制器作用域的变化
- 在隔离作用域指令中,在作用域上定义变量和在控制器上定义变量之间有什么区别吗?
- 为什么我应该在 AngularJS 中使用隔离的作用域指令
- angularJS无法获取作用域.指令中的数据