如何通过AngularJS中的属性将对象传递给指令?
我想通过属性传递对象(引用-双向绑定),而不是通过隔离的作用域。我该怎么做?因为代码将传递字符串而不是对象: HTML 两件事:如何通过AngularJS中的属性将对象传递给指令?,angularjs,angularjs-directive,Angularjs,Angularjs Directive,我想通过属性传递对象(引用-双向绑定),而不是通过隔离的作用域。我该怎么做?因为代码将传递字符串而不是对象: HTML 两件事: 根据Angular的要求,tr中的my指令应为my指令 惯例 {{row.data}打印变量,需要在不使用 {{}使其作为对象通过 {{}插值的结果是一个字符串。对象不能这样传递 绑定在这里是惯用的,因此更可取。当指令被迫使用父作用域时,整个过程变得混乱。但是,可以使用$parse手动解析作用域属性: $scope.$watch(function () {
tr
中的my指令应为my指令
惯例{{row.data}
打印变量,需要在不使用
{{}
使其作为对象通过{{}
插值的结果是一个字符串。对象不能这样传递
绑定在这里是惯用的,因此更可取。当指令被迫使用父作用域时,整个过程变得混乱。但是,可以使用$parse
手动解析作用域属性:
$scope.$watch(function () {
var myDirectiveGetter = $parse($attrs.myDirective);
return myDirectiveGetter($scope);
}, ...);
这是一个绑定作业(
指令可以执行双向数据绑定,而无需手动解析或编译任何内容,很抱歉没有提供plunker,但它是rebelius,不会为我保存
JS
HTML
您可以从输出中看到,传递的对象已双向绑定,指令中所做的更改反映在控制器级别上假设我将处理一个隔离范围。在“link:{…}”部分的指令中,我有一个函数scope.doSomthing。如何在html中运行此函数(ng单击)如果作用域是隔离的,doSomething
是否在指令或控制器的作用域中,您的用例是什么?这里:link:function(scope){scope.doSomething=function(){…}}
我想通过ng click=“doSomething()”在html中调用它。在我添加隔离的作用域之前:{}
对于指令,一切都正常您仍然可以执行模板:“do smth”
我在HTML文件中有此按钮,而不是在指令中。如果我单击它,则什么也不会发生
angular.module("app").directive("myDirective", function () {
return {
require: ["^form"],
restrict: "A",
link: function (scope, element, attrs, ctrls) {
scope.$watch(function () {
return attrs.myDirective;
}, function (newValue, oldValue) {
// .....
$scope.$watch(function () {
var myDirectiveGetter = $parse($attrs.myDirective);
return myDirectiveGetter($scope);
}, ...);
scope: true,
bindToController: {
myDirective: '<'
},
controllerAs: `vm`,
controller: function ($scope) {
$scope.$watch('vm.myDirective', ...);
}
var app = angular.module('plunker', []);
app.controller('MainCtrl', function($scope) {
$scope.myObj = {name: 'Tibro', age: 255}
})
.directive('myDirective', function(){
return {
scope: {
'myAttribute': '='
},
template: '{{myAttribute}}',
link: function(scope){
scope.myAttribute.age= 31
}
}
})
<body ng-controller="MainCtrl">
controller: {{myObj}} <br/>
directive: <my-directive my-attribute="myObj"></my-directive>
</body>
controller: {"name":"Tibro","age":31}
directive: {"name":"Tibro","age":31}