Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/395.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 指令隔离范围1.2.2_Javascript_Angularjs_Angularjs Directive_Angularjs Scope - Fatal编程技术网

Javascript 指令隔离范围1.2.2

Javascript 指令隔离范围1.2.2,javascript,angularjs,angularjs-directive,angularjs-scope,Javascript,Angularjs,Angularjs Directive,Angularjs Scope,我第一次使用Angular版本1.2.2,并尝试生成一个简单的指令,使用带“=”绑定的隔离作用域来传递对象。我以前做过几次,所以我想知道1.2.2中是否有一个改变改变了这一点 这是我的指示: .directive('vendorSelector', function (VendorFactory) { return { restrict: 'E', replace: true, scope: { vendorId: '=' },

我第一次使用Angular版本1.2.2,并尝试生成一个简单的指令,使用带“=”绑定的隔离作用域来传递对象。我以前做过几次,所以我想知道1.2.2中是否有一个改变改变了这一点

这是我的指示:

.directive('vendorSelector', function (VendorFactory) {
    return {
        restrict: 'E',
        replace: true,
        scope: { vendorId: '=' },
        template:   '<select ng-model="vendorId" ng-options="id for id in vendorIds">' +
                        '<option value="">-- choose vendor --</option>' +
                    '</select>',
        link: function (scope, element, attrs) {
            VendorFactory.getVendorIds().then(function(result) {
                scope.vendorIds = result;
            });
        }
    }
})
我尝试使用$scope.someValue和$scope.vendorId作为html模板中提供的对象。在这两种情况下,我得到的错误都是
与指令'vendorSelector'一起使用的表达式'undefined'是不可赋值的。我是否遗漏了一些明显的东西,阻止这些值在隔离范围内双向绑定?

在html中:

<vendor-selector vendorId="someValue"></vendor-selector>

更改
vendorId=“someValue”

vendor id=“someValue”

HTML属性不区分大小写,因此为了避免混淆,可以将所有camel大小写变量(vendorId)转换为snake大小写属性(vendorId)


所以
someValue
没有绑定到
vendorId
。导致
vendorId
在模板中未定义。这就是你的错误。

谢谢!你是一位绅士和学者。我应该更清楚,因为我已经适当地更改了camelCase的指令名称,但是完全没有考虑到这个属性:pt1.2中有很多更改,包括与隔离范围相关的更改,所以我完全同意您的想法。不客气!有很多变化:也就是说,它起作用了!(不接管同一元素上的非隔离指令的范围。)此外,链接优先级的顺序是相反的。
.controller('AddProductController', function($scope, ProductFactory, AlertFactory) {
    $scope.vendorId = 0;
    $scope.someValue = undefined;
})
<vendor-selector vendorId="someValue"></vendor-selector>