【问题标题】:angularjs '@' local scope property not doing bindingangularjs'@'本地范围属性不做绑定
【发布时间】:2014-09-21 05:00:03
【问题描述】:

我正在使用带有 angularjs 的 asp.net mvc4,但在使用具有隔离范围的指令时遇到了问题。

这是我在 js 文件中所做的:-

.controller('myTransactionController', ['$scope', '$http', function ($scope, $http) {

$scope.debt = 100;

}])
.directive('myDebt', function () {
   function link(scope, element, attr) {
    element.text(scope.debtval);
}
return {
    scope: { debtval: '@mydebtval' },
    link: link
}
});

这是在视野中

<input name="name" data-ng-model="debt" />

<span my-debt mydebtval="{{debt}}" >{{debt}}</span>

就'@'局部范围而言,它是单向绑定属性,应该改变 随着其父项的值发生变化,但当我更改输入类型的值(即父范围值)时,跨度标记的值不会改变。

谁能告诉我为什么当我改变输入标签的值时跨度标签的值没有改变?

谢谢

【问题讨论】:

    标签: angularjs


    【解决方案1】:

    尝试这样做:

    scope: { debtval: '@myDebtVal' }
    

    并像这样使用它:

    <span my-debt my-debt-val="{{debt}}" >
    

    Example

    请记住,当您想要访问指令的属性时,需要遵循命名约定。您的指令称为“myDeb”,因此它的属性应使用与指令名称本身相同的驼峰式扩展命名为“myDebXxxYyy”。

    您可能想知道的另一件事是您可以这样做:

    scope: { val: '@' }
    

    然后像以前一样使用它:

    <span my-debt my-debt-val="{{debt}}" >
    

    当然,作用域的名称是 $scope.val 而不是 $scope.debtval

    【讨论】:

    • @user2456467 我刚刚更新了我的答案,希望这能帮助您理解原因。我将在几秒钟内进行另一次更新,解释更多可以用于指令属性名称的技巧。 ;)
    • @user2456467 如果这解决了您的问题,请告诉我,谢谢!
    • 糟糕!刚刚意识到让属性跟随驼峰式使得这里失败了。简而言之,它不适用于属性名称“@myDebtVal”,但可以使用“@mydebtval”
    • @user2456467 确实有效!看看这个:jsfiddle.net/4Ly5bw3d你的问题一定是别的。
    • 还有一件事它可以与“@myDebtval”一起正常工作,请注意这里的小 v。
    猜你喜欢
    • 1970-01-01
    • 2014-12-08
    • 2014-09-29
    • 2013-06-27
    • 1970-01-01
    • 2015-07-02
    • 1970-01-01
    • 2014-02-17
    相关资源
    最近更新 更多