1

在指令中,定义范围:{isoNetwork:'=network'},如果父范围没有'network'属性,它会自动创建它吗?以下图片是父范围: 在此处输入图像描述

这是代码示例(在 jsFiddle 中相同:http: //jsfiddle.net/yougen/mvYrJ/7/):

var app = angular.module('app',[])

app.controller('AppCtrl', function($scope){
   $scope.leaveVoicemail = function(number, message, network){
       console.log("controller scope: ", $scope);
       window.alert("Number: " + number + " said: " + message + ", by network: " + network);
   };
});

app.directive('phone', function(){
    return {
        restrict:'E',
        scope:{
            isolatedAttributeNumber:'@number',
            isoNetwork:'=network',
            makeCall:'&'
        },
        link:function(scope){
            scope.networks = ["Verizon", "AT&T", "Sprint"];
            scope.isoNetwork = scope.networks[1];
        }
    };
});

html:

<div ng-app="app" ng-controller="AppCtrl">
        <phone number="555-1234" network="network" make-call="leaveVoicemail(number, message, network)">
            <div>
                Number:{{isolatedAttributeNumber}}  Network:<select ng-model="isoNetwork" ng-options="net for net in networks"></select>
            </div>
            Your message:<input type="text" ng-model="voiceMessage"><br>
            <button class="btn" ng-click="makeCall({number: isolatedAttributeNumber, message: voiceMessage, network: isoNetwork})">Call Home!</button>
        </phone>
</div>
4

1 回答 1

2

是的。这就是=隔离作用域中的绑定的工作方式。该指令有自己的范围,但您仍然需要一种与外部范围通信的方式(不是“父”范围,因为指令的范围是隔离的)。

绑定提供到外部的=双向绑定。因此,当您在指令中绑定模型时<phone nework="network" ...,您是在告诉 Angular 将network值设置在控制器的范围内。当您设置时,这会在您的link函数内部发生isoNetwork

如果您正在寻找单向绑定,请考虑@绑定,它是一种单向字符串绑定,它不同于作为=双向引用的绑定。

于 2013-08-28T10:00:39.130 回答