国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > JavaScript > 正文

AngularJS中如何使用$parse或$eval在運行時對Scope變量賦值

2019-11-20 10:42:19
字體:
來源:轉載
供稿:網友

在"AngularJS中自定義有關一個表格的Directive"中自定義了一個有關表格的Direcitve,其表格的表現方式是這樣的:

<table-helper datasource="customers" clumnmap="[{name: 'Name'}, {street: 'Street'}, {age: 'Age'}, {url: 'URL', hidden: true}]"></table-helper>

以上,變量colmnmap的值是事先定義在了Scope中的:

return {restrict: 'E',scope: {columnmap: '=',datasource: '='},link:link,template:template}; 

AngularJS中,還有一種運行時給Scope變量賦值的辦法,那就是在link函數中使用$parse或$eval方法。

在Direcitve的呈現方面和以前一致:

<table-helper-with-parse datasource="customers" columnmap="[{name: 'Name'},...]"></table-helper-with-parse>

Directive大致是這樣:

var tableHelperWithParse = function($parse){var template = "",link = function(scope, element, attrs){var headerCols = [],tableStart = '<table>',tableEnd = '</table>',table = '',visibleProps = [],sortCol = null,sortDir = 1,columnmap = null;$scope.$watchCollection('datasource', render);//運行時賦值columnmapcolumnmap = scope.$eval(attrs.columnmap);//或者columnmap = $parse(attrs.columnmap)();wireEvents();function rener(){if(scope.datasource && scope.datasourse.length){table += tableStart;table += renderHeader();table += renderRows() + tableEnd;renderTable();}}};return {restrict: 'E',scope: {datasource: '='},link: link,template: template}}angular.module('direcitvesModule').directive('tableHelperWithParse', tableHelperWithParse);

下面給大家介紹下$parse和$eval的不同

首先,$parse跟$eval都是用來解析表達式的, 但是$parse是作為一個單獨的服務存在的。$eval是作為scope的方法來使用的。

$parse典型的使用是放在設置字符串表達式映射在真實對象上的值。也可以從$parse上直接獲取到表達式對應的值。

var getter = $parse('user.name'); var setter = getter.assign; setter(scope, 'new name');getter(context, locals) // 傳入作用域,返回值setter(scope,'new name') // 修改映射在scope上的屬性的值為‘new value'

$eval 即scope.$eval,是執行當前作用域下的表達式,如:scope.$eval('a+b'); 而這個里的a,b是來自 scope = {a: 2, b:3};

看看源碼它的實現是

$eval: function(expr, locals) {return $parse(expr)(this, locals);},

可以找到它也是基于$parse,不過它的參數已經被固定為this,就是當前的scope,所以$eval只是在$parse基礎上的封裝而已,是一種$parse快捷的API。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 普定县| 贵德县| 交口县| 遵义县| 四平市| 凤城市| 太湖县| 通山县| 北票市| 湘阴县| 阳新县| 沧州市| 平和县| 开平市| 南部县| 盱眙县| 江永县| 济宁市| 合江县| 宝丰县| 武宣县| 喀什市| 哈巴河县| 佛冈县| 瓦房店市| 西乡县| 阳东县| 长顺县| 临汾市| 方城县| 凤山县| 滦南县| 平安县| 安康市| 若羌县| 宣武区| 延长县| 桃江县| 丽江市| 湖口县| 绥江县|